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;
|
||
|
}
|
||
|
}
|
||
|
|