mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	kernel: generic: fix fonfxc uimage parser
We cannot distinguish between fonfxc uImage and generic uImage because
fonfxc uImage header is almost same as generic uImage, except padding
length after image name.
The fonfxc uImage parser is available when specifying directly with DT
compatible property.  So this patch adds check if the partition DT node
is compatible with the parser.
Ref: https://bugs.openwrt.org/index.php?do=details&task_id=2413
Fixes: a1c6a316d2 ("ramips: add support for Fon FON2601")
Signed-off-by: NOGUCHI Hiroshi <drvlabo@gmail.com>
[commit light touches and removed C code comment]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
			
			
This commit is contained in:
		
							parent
							
								
									ea1acaf5a6
								
							
						
					
					
						commit
						e92a14709d
					
				@ -398,15 +398,6 @@ static ssize_t uimage_find_fonfxc(u_char *buf, size_t len, int *extralen)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
mtdsplit_uimage_parse_fonfxc(struct mtd_info *master,
 | 
			
		||||
			      const struct mtd_partition **pparts,
 | 
			
		||||
			      struct mtd_part_parser_data *data)
 | 
			
		||||
{
 | 
			
		||||
	return __mtdsplit_parse_uimage(master, pparts, data,
 | 
			
		||||
				       uimage_find_fonfxc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
 | 
			
		||||
static const struct of_device_id mtdsplit_uimage_fonfxc_of_match_table[] = {
 | 
			
		||||
	{ .compatible = "fonfxc,uimage" },
 | 
			
		||||
@ -414,6 +405,22 @@ static const struct of_device_id mtdsplit_uimage_fonfxc_of_match_table[] = {
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
mtdsplit_uimage_parse_fonfxc(struct mtd_info *master,
 | 
			
		||||
			      const struct mtd_partition **pparts,
 | 
			
		||||
			      struct mtd_part_parser_data *data)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np_mtd;
 | 
			
		||||
 | 
			
		||||
	np_mtd = mtd_get_of_node(master);
 | 
			
		||||
	if (!np_mtd ||
 | 
			
		||||
	    !of_match_node(mtdsplit_uimage_fonfxc_of_match_table, np_mtd))
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
 | 
			
		||||
	return __mtdsplit_parse_uimage(master, pparts, data,
 | 
			
		||||
				       uimage_find_fonfxc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct mtd_part_parser uimage_fonfxc_parser = {
 | 
			
		||||
	.owner = THIS_MODULE,
 | 
			
		||||
	.name = "fonfxc-fw",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user