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>