--- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig @@ -27,6 +27,11 @@ config MTD_SPLIT_FIRMWARE_NAME depends on MTD_SPLIT_FIRMWARE default "firmware" +config MTD_UIMAGE_SPLIT + bool "Enable split support for firmware partitions containing a uImage" + depends on MTD_SPLIT_FIRMWARE + default y + source "drivers/mtd/mtdsplit/Kconfig" endmenu --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -696,6 +696,37 @@ mtd_pad_erasesize(struct mtd_info *mtd, return len; } +#define UBOOT_MAGIC 0x27051956 + +static void split_uimage(struct mtd_info *master, struct mtd_part *part) +{ + struct { + __be32 magic; + __be32 pad[2]; + __be32 size; + } hdr; + size_t len; + + if (mtd_read(master, part->offset, sizeof(hdr), &len, (void *) &hdr)) + return; + + if (len != sizeof(hdr) || hdr.magic != cpu_to_be32(UBOOT_MAGIC)) + return; + + len = be32_to_cpu(hdr.size) + 0x40; + len = mtd_pad_erasesize(master, part->offset, len); + if (len + master->erasesize > part->mtd.size) + return; + + if (config_enabled(CONFIG_MTD_SPLIT_UIMAGE_FW)) + pr_err("Dedicated partitioner didn't split firmware partition, please fill a bug report!\n"); + else + pr_warn("Support for built-in firmware splitter will be removed, please use CONFIG_MTD_SPLIT_UIMAGE_FW\n"); + + __mtd_add_partition(master, "rootfs", part->offset + len, + part->mtd.size - len, false); +} + #ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME #define SPLIT_FIRMWARE_NAME CONFIG_MTD_SPLIT_FIRMWARE_NAME #else @@ -704,7 +735,14 @@ mtd_pad_erasesize(struct mtd_info *mtd, static void split_firmware(struct mtd_info *master, struct mtd_part *part) { - run_parsers_by_type(part, MTD_PARSER_TYPE_FIRMWARE); + int ret; + + ret = run_parsers_by_type(part, MTD_PARSER_TYPE_FIRMWARE); + if (ret > 0) + return; + + if (config_enabled(CONFIG_MTD_UIMAGE_SPLIT)) + split_uimage(master, part); } void __weak arch_split_mtd_part(struct mtd_info *master, const char *name, ba496cac4fc6115207e795d3bcf605930ea0460'>refslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.13/502-yaffs-3.10-disable-proc-entry.patch
blob: 5345678c56498611356ca93681870b7893757837 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
--- a/fs/yaffs2/yaffs_vfs.c
+++ b/fs/yaffs2/yaffs_vfs.c
@@ -3025,6 +3025,7 @@ static DECLARE_FSTYPE(yaffs2_fs_type, "y
 #endif
 
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0))
 static struct proc_dir_entry *my_proc_entry;
 
 static char *yaffs_dump_dev_part0(char *buf, struct yaffs_dev *dev)
@@ -3398,6 +3399,7 @@ static int yaffs_proc_write(struct file 
 		return yaffs_proc_debug_write(file, buf, count, data);
 	return yaffs_proc_write_trace_options(file, buf, count, data);
 }
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0)) */
 
 /* Stuff to handle installation of file systems */
 struct file_system_to_install {
@@ -3421,6 +3423,7 @@ static int __init init_yaffs_fs(void)
 
 	mutex_init(&yaffs_context_lock);
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0))
 	/* Install the proc_fs entries */
 	my_proc_entry = create_proc_entry("yaffs",
 					  S_IRUGO | S_IFREG, YPROC_ROOT);
@@ -3432,6 +3435,7 @@ static int __init init_yaffs_fs(void)
 	} else {
 		return -ENOMEM;
         }
+#endif
 
 	/* Now add the file system entries */
 
@@ -3468,7 +3472,9 @@ static void __exit exit_yaffs_fs(void)
 	yaffs_trace(YAFFS_TRACE_ALWAYS,
 		"yaffs built " __DATE__ " " __TIME__ " removing.");
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0))
 	remove_proc_entry("yaffs", YPROC_ROOT);
+#endif
 
 	fsinst = fs_to_install;