Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Apr 2025 10:49:12 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: aa9ebe156011 - main - arm/mv: Convert to fdt_foreach_mem_region
Message-ID:  <202504081049.538AnCBB002087@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=aa9ebe1560114f06dbd9c4c5a9b72b056ee13c94

commit aa9ebe1560114f06dbd9c4c5a9b72b056ee13c94
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2025-04-08 10:30:39 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2025-04-08 10:48:28 +0000

    arm/mv: Convert to fdt_foreach_mem_region
    
    The Marvell platform code checks each DDR bank is in the FDT. This was
    using fdt_get_mem_regions. In preperation for removing this switch to
    fdt_foreach_mem_region.
    
    Reviewed by:    imp
    Sponsored by:   Arm Ltd
    Differential Revision:  https://reviews.freebsd.org/D49701
---
 sys/arm/mv/mv_common.c | 52 ++++++++++++++++++++++++++++----------------------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/sys/arm/mv/mv_common.c b/sys/arm/mv/mv_common.c
index a1302859644a..c4af5564ca13 100644
--- a/sys/arm/mv/mv_common.c
+++ b/sys/arm/mv/mv_common.c
@@ -984,40 +984,46 @@ decode_win_cpu_setup(void)
 
 }
 
+struct ddr_data {
+	uint8_t window_valid[MV_WIN_DDR_MAX];
+	uint32_t mr_count;
+	uint32_t valid_win_num;
+};
+
+static void
+ddr_valid_cb(const struct mem_region *mr, void *arg)
+{
+	struct ddr_data *data = arg;
+	int j;
+
+	for (j = 0; j < MV_WIN_DDR_MAX; j++) {
+		if (ddr_is_active(j) &&
+		    (ddr_base(j) == mr->mr_start) &&
+		    (ddr_size(j) == mr->mr_size)) {
+			data->window_valid[j] = 1;
+			data->valid_win_num++;
+		}
+	}
+	data->mr_count++;
+}
+
 static int
 decode_win_sdram_fixup(void)
 {
-	struct mem_region mr[FDT_MEM_REGIONS];
-	uint8_t window_valid[MV_WIN_DDR_MAX];
-	int mr_cnt, err, i, j;
-	uint32_t valid_win_num = 0;
+	struct ddr_data window_data;
+	int err, j;
 
-	/* Grab physical memory regions information from device tree. */
-	err = fdt_get_mem_regions(mr, &mr_cnt, NULL);
+	memset(&window_data, 0, sizeof(window_data));
+	err = fdt_foreach_mem_region(ddr_valid_cb, &window_data);
 	if (err != 0)
 		return (err);
 
-	for (i = 0; i < MV_WIN_DDR_MAX; i++)
-		window_valid[i] = 0;
-
-	/* Try to match entries from device tree with settings from u-boot */
-	for (i = 0; i < mr_cnt; i++) {
-		for (j = 0; j < MV_WIN_DDR_MAX; j++) {
-			if (ddr_is_active(j) &&
-			    (ddr_base(j) == mr[i].mr_start) &&
-			    (ddr_size(j) == mr[i].mr_size)) {
-				window_valid[j] = 1;
-				valid_win_num++;
-			}
-		}
-	}
-
-	if (mr_cnt != valid_win_num)
+	if (window_data.mr_count != window_data.valid_win_num)
 		return (EINVAL);
 
 	/* Destroy windows without corresponding device tree entry */
 	for (j = 0; j < MV_WIN_DDR_MAX; j++) {
-		if (ddr_is_active(j) && (window_valid[j] != 1)) {
+		if (ddr_is_active(j) && (window_data.window_valid[j] != 1)) {
 			printf("Disabling SDRAM decoding window: %d\n", j);
 			ddr_disable(j);
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202504081049.538AnCBB002087>