git: aa9ebe156011 - main - arm/mv: Convert to fdt_foreach_mem_region
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 08 Apr 2025 10:49:12 UTC
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);
}