Skip to contentSkip to conversation

Export CFI Flash to the MTD and support it in UBI

U-Boot New Piotr Ziecik 2 participants 7 messages Nov 17, 2008 – Nov 24, 2008 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

Following patches allow for CFI Flash support in UBI and other MTD based parts of U-Boot. This is done by adding cfi_mtd driver which exports CFI Flash to the MTD layer.

First patch adds cfi_mtd driver to the U-Boot. Second cleans printf() in MTD layer. The last one adds proof-of-concept CFI Flash support to the UBI.

The baseline of the following patches is the 'testing' branch in the 'u-boot-ubi' repo.

Best regards,
Piotr Ziecik

#1 lore raw

PATCH 1/3 cfi-mtd: Add cfi-mtd driver.

Add cfi-mtd driver, which exports CFI flash to MTD layer. This allows CFI flash devices to be used from MTD layer.

Building of the new driver is controlled by CONFIG_FLASH_CFI_MTD option. Initialization is done by calling cfi_mtd_init() from flash_init().

---
This patch requires following (already posted) patches:
- flash: Exported flash_sector_size() function.
- flash: Added interface for flash verbosity control.

 README                  |    5 +
 drivers/mtd/Makefile    |    1 +
 drivers/mtd/cfi_flash.c |    5 +
 drivers/mtd/cfi_mtd.c   |  202 +++++++++++++++++++++++++++++++++++++++++++++++
 include/flash.h         |    8 ++
 5 files changed, 221 insertions(+), 0 deletions(-)
 create mode 100644 drivers/mtd/cfi_mtd.c
README +5 -0
index ebee20f..e43dbb1 100644
@@ -2155,6 +2155,11 @@ Configuration Settings:
 		This option also enables the building of the cfi_flash driver
 		in the drivers directory
 
+- CONFIG_FLASH_CFI_MTD
+		This option enables the building of the cfi_mtd driver
+		in the drivers directory. The driver exports CFI flash
+		to the MTD layer.
+
 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE
 		Use buffered writes to flash.
 
drivers/mtd/Makefile +1 -0
index d225a68..b665a97 100644
@@ -28,6 +28,7 @@ LIB	:= $(obj)libmtd.a
 COBJS-$(CONFIG_CMD_UBI) += mtdcore.o mtdpart.o
 COBJS-$(CONFIG_HAS_DATAFLASH) += at45.o
 COBJS-$(CONFIG_FLASH_CFI_DRIVER) += cfi_flash.o
+COBJS-$(CONFIG_FLASH_CFI_MTD) += cfi_mtd.o
 COBJS-$(CONFIG_HAS_DATAFLASH) += dataflash.o
 COBJS-$(CONFIG_FLASH_CFI_LEGACY) += jedec_flash.o
 COBJS-$(CONFIG_MW_EEPROM) += mw_eeprom.o
drivers/mtd/cfi_flash.c +5 -0
index d828e77..13dc320 100644
@@ -2068,5 +2068,10 @@ unsigned long flash_init (void)
 			       flash_get_info(apl[i].start));
 	}
 #endif
+
+#ifdef CONFIG_FLASH_CFI_MTD
+	cfi_mtd_init();
+#endif
+
 	return (size);
 }
drivers/mtd/cfi_mtd.c new file +202 -0

202 lines not on this page · raw message

include/flash.h +8 -0
index 05fa572..6e2981c 100644
@@ -86,6 +86,9 @@ typedef unsigned long flash_sect_t;
 
 /* convert between bit value and numeric value */
 #define CFI_FLASH_SHIFT_WIDTH	3
+
+/* cfi-mtd device name */
+#define	CFI_MTD_DEV_NAME	"cfi-mtd"
 /* Prototypes */
 
 extern unsigned long flash_init (void);
@@ -103,6 +106,11 @@ extern int flash_write (char *, ulong, ulong);
 extern flash_info_t *addr2info (ulong);
 extern int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt);
 
+/* drivers/mtd/cfi_mtd.c */
+#ifdef CONFIG_FLASH_CFI_MTD
+extern int cfi_mtd_init(void);
+#endif
+
 /* board/?/flash.c */
 #if defined(CONFIG_SYS_FLASH_PROTECTION)
 extern int flash_real_protect(flash_info_t *info, long sector, int prot);
Signature · 1 line
1.5.6.1
#2 lore raw

PATCH 1/3 cfi-mtd: Add cfi-mtd driver.

Quoted 8 lines · Piotr Ziecik

Add cfi-mtd driver, which exports CFI flash to MTD layer. This allows CFI flash devices to be used from MTD layer.

Building of the new driver is controlled by CONFIG_FLASH_CFI_MTD option. Initialization is done by calling cfi_mtd_init() from flash_init().

Applied to u-boot-cfi-flash. Thanks.

Best regards,
Stefan

=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================

#3 lore raw

PATCH 2/3 mtd: Remove a printf() from add_mtd_device().

In reply to Piotr Ziecik

Remove a printf() from add_mtd_device(), which produces spurious output.

---
 drivers/mtd/mtdcore.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)
drivers/mtd/mtdcore.c +0 -2
index 64bd7d4..6eb52ed 100644
@@ -25,8 +25,6 @@ int add_mtd_device(struct mtd_info *mtd)
 			mtd->index = i;
 			mtd->usecount = 0;
 
-			printf("mtd: Giving out device %d to %s\n",
-				i, mtd->name);
 			/* No need to get a refcount on the module containing
 			   the notifier, since we hold the mtd_table_mutex */
 
Signature · 1 line
1.5.6.1
Applied
#4 lore raw

PATCH 2/3 mtd: Remove a printf() from add_mtd_device().

Quoted 3 lines · Piotr Ziecik

Remove a printf() from add_mtd_device(), which produces spurious output.

Applied to ubi. Thanks.

Best regards,
Stefan

=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================

#5 lore raw

PATCH 3/3 ubi: Add proof-of-concept CFI flash support

In reply to Piotr Ziecik

With this patch UBI can be used on CFI flash chips.

---
For example to create UBI volume on empty flash partition (partition 0 on NOR device 0) use following commands:

=> setenv mtdids nor0=nor
=> mtdparts add nor0 8m at 32m nor-part
=> saveenv
=> ubi part nor nor0,0
=> ubi create ubi-vol
=> ubi info layout

 common/cmd_ubi.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
common/cmd_ubi.c +7 -1
index a656786..4217fa0 100644
@@ -24,6 +24,7 @@
 #define DEV_TYPE_NONE		0
 #define DEV_TYPE_NAND		1
 #define DEV_TYPE_ONENAND	2
+#define DEV_TYPE_NOR		3
 
 /* Private own data */
 static struct ubi_device *ubi;
@@ -485,6 +486,11 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 			ubi_dev.mtd_info = &nand_info[ubi_dev.nr];
 		}
 #endif
+		if (strcmp(argv[2], "nor") == 0) {
+			strcpy(ubi_dev.dev_name, "NOR");
+			ubi_dev.type = DEV_TYPE_NOR;
+			ubi_dev.mtd_info = get_mtd_device_nm(CFI_MTD_DEV_NAME);
+		}
 #if defined(CONFIG_CMD_ONENAND)
 		if (strcmp(argv[2], "onenand") == 0) {
 			strcpy(ubi_dev.dev_name, "OneNAND");
@@ -606,7 +612,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(ubi, 6, 1, do_ubi,
 	"ubi      - ubi commands\n",
-        "part [nand|onenand] [part]"
+        "part [nand|nor|onenand] [part]"
 		" - Show or set current partition\n"
 	"info [l[ayout]]"
 		" - Display volume and ubi layout information\n"
Signature · 1 line
1.5.6.1
Applied
#6 lore raw

PATCH 3/3 ubi: Add proof-of-concept CFI flash support

Quoted 3 lines · Piotr Ziecik

With this patch UBI can be used on CFI flash chips.

Applied to ubi. Thanks.

Best regards,
Stefan

=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================