From: Marek Vasut <[email protected]>

Both fdtdec_setup_memory_banksize() and fdtdec_setup_mem_size_base_lowest()
implement the exact same iterator over all memory banks, the only difference
is the body that is executed for each bank. Deduplicate the functionality
into iterator function fdtdec_setup_mem_for_each_bank(), which takes a
function pointer to a function which implements the body as a parameter.
No functional change.

Reviewed-by: Ilias Apalodimas <[email protected]>
Signed-off-by: Ilias Apalodimas <[email protected]>
Signed-off-by: Marek Vasut <[email protected]>
---
 lib/fdtdec.c | 77 ++++++++++++++++++++--------------------------------
 1 file changed, 30 insertions(+), 47 deletions(-)

diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index c38738b48c79..d820f75b031d 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1092,7 +1092,7 @@ ofnode get_next_memory_node(ofnode mem)
        return mem;
 }
 
-int fdtdec_setup_memory_banksize(void)
+static int fdtdec_setup_mem_for_each_bank(void (*bankfn)(struct resource *res, 
int bank))
 {
        int bank, ret, reg = 0;
        struct resource res;
@@ -1120,63 +1120,46 @@ int fdtdec_setup_memory_banksize(void)
                if (ret != 0)
                        return -EINVAL;
 
-               gd->bd->bi_dram[bank].start = (phys_addr_t)res.start;
-               gd->bd->bi_dram[bank].size =
-                       (phys_size_t)(res.end - res.start + 1);
-
-               debug("%s: DRAM Bank #%d: start = 0x%llx, size = 0x%llx\n",
-                     __func__, bank,
-                     (unsigned long long)gd->bd->bi_dram[bank].start,
-                     (unsigned long long)gd->bd->bi_dram[bank].size);
+               bankfn(&res, bank);
        }
 
        return 0;
 }
 
-int fdtdec_setup_mem_size_base_lowest(void)
+static void fdtdec_setup_memory_banksize_bankfn(struct resource *res, int bank)
 {
-       int bank, ret, reg = 0;
-       struct resource res;
-       unsigned long base;
-       phys_size_t size;
-       ofnode mem = ofnode_null();
+       gd->bd->bi_dram[bank].start = (phys_addr_t)res->start;
+       gd->bd->bi_dram[bank].size = (phys_size_t)(res->end - res->start + 1);
 
-       gd->ram_base = (unsigned long)~0;
-
-       mem = get_next_memory_node(mem);
-       if (!ofnode_valid(mem)) {
-               debug("%s: Missing /memory node\n", __func__);
-               return -EINVAL;
-       }
-
-       for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
-               ret = ofnode_read_resource(mem, reg++, &res);
-               if (ret < 0) {
-                       reg = 0;
-                       mem = get_next_memory_node(mem);
-                       if (!ofnode_valid(mem))
-                               break;
-
-                       ret = ofnode_read_resource(mem, reg++, &res);
-                       if (ret < 0)
-                               break;
-               }
-
-               if (ret != 0)
-                       return -EINVAL;
+       debug("%s: DRAM Bank #%d: start = 0x%llx, size = 0x%llx\n",
+             __func__, bank,
+             (unsigned long long)gd->bd->bi_dram[bank].start,
+             (unsigned long long)gd->bd->bi_dram[bank].size);
+}
 
-               base = (unsigned long)res.start;
-               size = (phys_size_t)(res.end - res.start + 1);
+int fdtdec_setup_memory_banksize(void)
+{
+       return 
fdtdec_setup_mem_for_each_bank(fdtdec_setup_memory_banksize_bankfn);
+}
 
-               if (gd->ram_base > base && size) {
-                       gd->ram_base = base;
-                       gd->ram_size = size;
-                       debug("%s: Initial DRAM base %lx size %lx\n",
-                             __func__, base, (unsigned long)size);
-               }
+static void fdtdec_setup_mem_size_base_lowest_bankfn(struct resource *res, int 
bank)
+{
+       unsigned long base = (unsigned long)res->start;
+       phys_size_t size = (phys_size_t)(res->end - res->start + 1);
+
+       if (gd->ram_base > base && size) {
+               gd->ram_base = base;
+               gd->ram_size = size;
+               debug("%s: Initial DRAM base %lx size %lx\n",
+                     __func__, base, (unsigned long)size);
        }
+}
 
-       return 0;
+int fdtdec_setup_mem_size_base_lowest(void)
+{
+       gd->ram_base = (unsigned long)~0;
+
+       return 
fdtdec_setup_mem_for_each_bank(fdtdec_setup_mem_size_base_lowest_bankfn);
 }
 
 static int uncompress_blob(const void *src, ulong sz_src, void **dstp)
-- 
2.53.0

Reply via email to