 946bfd59a6
			
		
	
	946bfd59a6
	
	
	
		
			
			Refactoring of bcm47xx_nvram driver. It's used by bcm47xx and bcm53xx.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit 1c48eee5b2)
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From f52da4ccfec9192e17f5c16260dfdd6d3ea76f65 Mon Sep 17 00:00:00 2001
 | |
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
 | |
| Date: Mon, 8 Mar 2021 10:03:20 +0100
 | |
| Subject: [PATCH] firmware: bcm47xx_nvram: inline code checking NVRAM size
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| Separated function was not improving code quality much (or at all).
 | |
| Moreover it expected possible flash end address as argument and it was
 | |
| returning NVRAM size.
 | |
| 
 | |
| The new code always operates on offsets which means less logic and less
 | |
| calculations.
 | |
| 
 | |
| Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | |
| Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
 | |
| ---
 | |
|  drivers/firmware/broadcom/bcm47xx_nvram.c | 25 +++++++----------------
 | |
|  1 file changed, 7 insertions(+), 18 deletions(-)
 | |
| 
 | |
| --- a/drivers/firmware/broadcom/bcm47xx_nvram.c
 | |
| +++ b/drivers/firmware/broadcom/bcm47xx_nvram.c
 | |
| @@ -42,18 +42,6 @@ static bool bcm47xx_nvram_is_valid(void
 | |
|  	return ((struct nvram_header *)nvram)->magic == NVRAM_MAGIC;
 | |
|  }
 | |
|  
 | |
| -static u32 find_nvram_size(void __iomem *end)
 | |
| -{
 | |
| -	int i;
 | |
| -
 | |
| -	for (i = 0; i < ARRAY_SIZE(nvram_sizes); i++) {
 | |
| -		if (bcm47xx_nvram_is_valid(end - nvram_sizes[i]))
 | |
| -			return nvram_sizes[i];
 | |
| -	}
 | |
| -
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
|  /**
 | |
|   * bcm47xx_nvram_copy - copy NVRAM to internal buffer
 | |
|   */
 | |
| @@ -85,7 +73,7 @@ static int bcm47xx_nvram_find_and_copy(v
 | |
|  {
 | |
|  	size_t flash_size;
 | |
|  	size_t offset;
 | |
| -	u32 size;
 | |
| +	int i;
 | |
|  
 | |
|  	if (nvram_len) {
 | |
|  		pr_warn("nvram already initialized\n");
 | |
| @@ -93,12 +81,13 @@ static int bcm47xx_nvram_find_and_copy(v
 | |
|  	}
 | |
|  
 | |
|  	/* TODO: when nvram is on nand flash check for bad blocks first. */
 | |
| +
 | |
| +	/* Try every possible flash size and check for NVRAM at its end */
 | |
|  	for (flash_size = FLASH_MIN; flash_size <= res_size; flash_size <<= 1) {
 | |
| -		/* Windowed flash access */
 | |
| -		size = find_nvram_size(flash_start + flash_size);
 | |
| -		if (size) {
 | |
| -			offset = flash_size - size;
 | |
| -			goto found;
 | |
| +		for (i = 0; i < ARRAY_SIZE(nvram_sizes); i++) {
 | |
| +			offset = flash_size - nvram_sizes[i];
 | |
| +			if (bcm47xx_nvram_is_valid(flash_start + offset))
 | |
| +				goto found;
 | |
|  		}
 | |
|  	}
 | |
|  
 |