mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	* properly format/comment all patches * merge debloat patches * merge Kconfig patches * merge swconfig patches * merge hotplug patches * drop 200-fix_localversion.patch - upstream * drop 222-arm_zimage_none.patch - unused * drop 252-mv_cesa_depends.patch - no longer required * drop 410-mtd-move-forward-declaration-of-struct-mtd_info.patch - unused * drop 661-fq_codel_keep_dropped_stats.patch - outdated * drop 702-phy_add_aneg_done_function.patch - upstream * drop 840-rtc7301.patch - unused * drop 841-rtc_pt7c4338.patch - upstream * drop 921-use_preinit_as_init.patch - unused * drop spio-gpio-old and gpio-mmc - unused Signed-off-by: John Crispin <john@phrozen.org>
		
			
				
	
	
		
			78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 1eeef2d7483a7e3f8d2dd2a5b9939b3b814dc549 Mon Sep 17 00:00:00 2001
 | |
| From: Chris Packham <chris.packham@alliedtelesis.co.nz>
 | |
| Date: Fri, 9 Jun 2017 15:58:31 +1200
 | |
| Subject: [PATCH] mtd: handle partitioning on devices with 0 erasesize
 | |
| 
 | |
| erasesize is meaningful for flash devices but for SRAM there is no
 | |
| concept of an erase block so erasesize is set to 0. When partitioning
 | |
| these devices instead of ensuring partitions fall on erasesize
 | |
| boundaries we ensure they fall on writesize boundaries.
 | |
| 
 | |
| Helped-by: Boris Brezillon <boris.brezillon@free-electrons.com>
 | |
| Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
 | |
| Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
 | |
| Signed-off-by: Brian Norris <computersforpeace@gmail.com>
 | |
| ---
 | |
|  drivers/mtd/mtdpart.c | 26 +++++++++++++++++---------
 | |
|  1 file changed, 17 insertions(+), 9 deletions(-)
 | |
| 
 | |
| --- a/drivers/mtd/mtdpart.c
 | |
| +++ b/drivers/mtd/mtdpart.c
 | |
| @@ -393,8 +393,12 @@ static struct mtd_part *allocate_partiti
 | |
|  			const struct mtd_partition *part, int partno,
 | |
|  			uint64_t cur_offset)
 | |
|  {
 | |
| +	int wr_alignment = (master->flags & MTD_NO_ERASE) ? master->writesize:
 | |
| +							    master->erasesize;
 | |
|  	struct mtd_part *slave;
 | |
| +	u32 remainder;
 | |
|  	char *name;
 | |
| +	u64 tmp;
 | |
|  
 | |
|  	/* allocate the partition structure */
 | |
|  	slave = kzalloc(sizeof(*slave), GFP_KERNEL);
 | |
| @@ -499,10 +503,11 @@ static struct mtd_part *allocate_partiti
 | |
|  	if (slave->offset == MTDPART_OFS_APPEND)
 | |
|  		slave->offset = cur_offset;
 | |
|  	if (slave->offset == MTDPART_OFS_NXTBLK) {
 | |
| +		tmp = cur_offset;
 | |
|  		slave->offset = cur_offset;
 | |
| -		if (mtd_mod_by_eb(cur_offset, master) != 0) {
 | |
| -			/* Round up to next erasesize */
 | |
| -			slave->offset = (mtd_div_by_eb(cur_offset, master) + 1) * master->erasesize;
 | |
| +		remainder = do_div(tmp, wr_alignment);
 | |
| +		if (remainder) {
 | |
| +			slave->offset += wr_alignment - remainder;
 | |
|  			printk(KERN_NOTICE "Moving partition %d: "
 | |
|  			       "0x%012llx -> 0x%012llx\n", partno,
 | |
|  			       (unsigned long long)cur_offset, (unsigned long long)slave->offset);
 | |
| @@ -567,19 +572,22 @@ static struct mtd_part *allocate_partiti
 | |
|  		slave->mtd.erasesize = master->erasesize;
 | |
|  	}
 | |
|  
 | |
| -	if ((slave->mtd.flags & MTD_WRITEABLE) &&
 | |
| -	    mtd_mod_by_eb(slave->offset, &slave->mtd)) {
 | |
| +	tmp = slave->offset;
 | |
| +	remainder = do_div(tmp, wr_alignment);
 | |
| +	if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) {
 | |
|  		/* Doesn't start on a boundary of major erase size */
 | |
|  		/* FIXME: Let it be writable if it is on a boundary of
 | |
|  		 * _minor_ erase size though */
 | |
|  		slave->mtd.flags &= ~MTD_WRITEABLE;
 | |
| -		printk(KERN_WARNING"mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
 | |
| +		printk(KERN_WARNING"mtd: partition \"%s\" doesn't start on an erase/write block boundary -- force read-only\n",
 | |
|  			part->name);
 | |
|  	}
 | |
| -	if ((slave->mtd.flags & MTD_WRITEABLE) &&
 | |
| -	    mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) {
 | |
| +
 | |
| +	tmp = slave->mtd.size;
 | |
| +	remainder = do_div(tmp, wr_alignment);
 | |
| +	if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) {
 | |
|  		slave->mtd.flags &= ~MTD_WRITEABLE;
 | |
| -		printk(KERN_WARNING"mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
 | |
| +		printk(KERN_WARNING"mtd: partition \"%s\" doesn't end on an erase/write block -- force read-only\n",
 | |
|  			part->name);
 | |
|  	}
 | |
|  
 |