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

If you want to UBI on Apollon, uncomment the CONFIG_SYS_USE_UBI macro
Signed-off-by: Kyungmin Park kyungmin.park@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 */

On 18:19 Tue 21 Oct , Kyungmin Park wrote:
If you want to UBI on Apollon, uncomment the CONFIG_SYS_USE_UBI macro
Signed-off-by: Kyungmin Park kyungmin.park@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);
^^^^^^^^^^^^^^^^ whitespace please fix It will be better to have it in a header?
+/* drivers/mtd/ubi/build.c */ +extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp); +extern int ubi_init(void);
It will be better to have it in a header?
+#ifdef CONFIG_CMD_UBI
please move this to the Makefile
+int ubi_board_scan(void) +{
struct mtd_device *dev;
^^^^^^^^ whitespace please fix
struct part_info *part;
^^^^^^^^ whitespace please fix
struct mtd_partition mtd_part;
whitespace please fix ^^^^^^^^
char buffer[32];
^^^^^^^^ whitespace please fix
u8 pnum;
^^^^^^^^ whitespace please fix
int err;
^^^^^^^^ whitespace please fix
if (mtdparts_init() !=0)
^^^^^^^^ whitespace please fix
return 1;
^^^^^^^^^^^^^^^^ whitespace please fix
if (find_dev_and_part("onenand0,4", &dev, &pnum, &part) != 0)
^^^^^^^^ whitespace please fix
return 1;
^^^^^^^^^^^^^^^^ whitespace please fix
printf("%s[%d] pnum %d\n", __func__, __LINE__, pnum);
^^^^^^^^ whitespace please fix
sprintf(buffer, "mtd=%d", pnum);
^^^^^^^^ whitespace please fix
mtd_part.name = buffer;
^^^^^^^^ whitespace please fix
mtd_part.size = part->size;
^^^^^^^^ whitespace please fix
mtd_part.offset = part->offset;
^^^^^^^^ whitespace please fix
add_mtd_partitions(&onenand_mtd, &mtd_part, 1);
^^^^^^^^ whitespace please fix
err = ubi_mtd_param_parse(buffer, NULL);
^^^^^^^^ whitespace please fix
if (err)
^^^^^^^^ whitespace please fix
return err;
whitespace please fix
err = ubi_init();
^^^^^^^^ whitespace please fix
if (err)
^^^^^^^^ whitespace please fix
return err;
^^^^^^^^^^^^^^^^ whitespace please fix
return 0;
^^^^^^^^ whitespace please fix
+}
+#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"
too long please split
#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"
ditto
#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" \
ditto
- "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 */
Best Regards, J.

Dear Kyungmin Park,
In message 20081021091908.GA29310@july you wrote:
If you want to UBI on Apollon, uncomment the CONFIG_SYS_USE_UBI macro
Signed-off-by: Kyungmin Park kyungmin.park@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/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 */
Maximum line length exceeded.
/* @@ -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"
Maximum line length exceeded.
And please do not hard-code network parameters into U-Boot.
#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" \
Please also fix too long line above.
Best regards,
Wolfgang Denk

Dear Wolfgang,
-# 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"
Maximum line length exceeded.
Fixed all commented except one. I run the checkpatch.pl and passed.
And please do not hard-code network parameters into U-Boot.
Then how to define the network IP at bootargs? please give some example?
Thank you, Kyungmin Park

Hi Kyungmin,
Kyungmin Park wrote:
Dear Wolfgang,
-# 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"
Maximum line length exceeded.
Fixed all commented except one. I run the checkpatch.pl and passed.
And please do not hard-code network parameters into U-Boot.
Then how to define the network IP at bootargs? please give some example?
You set environment variables (ie. setenv bootcmd ...)
regards, Ben
participants (4)
-
Ben Warren
-
Jean-Christophe PLAGNIOL-VILLARD
-
Kyungmin Park
-
Wolfgang Denk