From nobody Tue Apr 08 10:49:11 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZX2rS18GTz5sCF6; Tue, 08 Apr 2025 10:49:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZX2rR3N0bz3kWD; Tue, 08 Apr 2025 10:49:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744109351; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WL/K+Ec4608T00QXJsmpc8eiDQcgx5smNPSDT2KB/PY=; b=gfTID9CtHKvJ5bcYUhRyUE0uJI9aTOpmjFHX+NNGxEbfcvg5Aoq/CmrjHdtjavGujdnTwO GMLChk6XA7IhWQ84ZPsNQBdGdnd0qc/I+ixTBx1zS9Vd1FMNRaQkIyHUAapRgQnLT7O88b H2ewwN1QseeL9VCVwnUSCYq4ItqcLo+UCIEnnBv9y4zkoirVKPmTq4Mour5Ei5RKntRhRk Tf8ACAQGBVRnviQ3XFXT2wYt0ondA+16WbQ5XEk3IQk1wb19nWfPwlAyMqf03h8PD35Ktq tylZdP6iO08Fh5chK/Fyg8pdyxbttljtQZKXgwbdQZm+QLZNrdHyEWQWHLfqag== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1744109351; a=rsa-sha256; cv=none; b=hq6zt2s32QQOLRNsXdYhaHDqv/FvMPPSKfgwaoH5/5oYzl3inGthuHPUs0sp/LCUbf88pB 3E1B4m3vmhjDZLj734uUHzejhmI7U/b1hYhFDHffFDIbu+7bn0lozUa1XmE0TJejRCAEPM jR1UCZPnj00XCGKzBQOUpxw6TvacI9cTJ2ejWv1swCynCFA/y4WJcAnURUQ3O0SRFI3+aN hglQcVjAhn1Imc/3jpsX6OLU7KBfL9VD5H0TElhSHeAg7oqXuucAfOlDpTYr1Q6XMY8Y2e REOR1sPIGhnwkTDN0OE6UpfWRpMWEXmFoaMLUB1ue6f57nnUcI8jeWp62hFeDQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744109351; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WL/K+Ec4608T00QXJsmpc8eiDQcgx5smNPSDT2KB/PY=; b=pe4bOrNzUwHRGd/cIF8aQIC+b/T0FmwfzImzdqkyInlPrPma2sQ6js7kOZ3dhRhPRKCNaF 0QJZzg+eo2v0naX5aTOc/Tb5+A54Wfkp/D6OiOGPEhBpElkwH+Thfmkh5tMcpxtRZs8Lq+ qT+6CjPfF01Tsc7b+g7diQ75VZ8kN9iaA+H+YVIKjQSN1oBrbItEO6Oupq+4nSMiVxrWje gn0pQVAp3kOftSKYgCTvqSuf8icRAU83OZ/S1hZAt0DCAPmT0YwO8VleM6yi8vpKAuXJN1 WclRnZLtRTPRQMh4iexr852qyHyifMqao1yZJul2w99nsdI6mKIF0VX9HOHKnA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZX2rR2sMwzCXc; Tue, 08 Apr 2025 10:49:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 538AnBns002058; Tue, 8 Apr 2025 10:49:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 538AnBRE002055; Tue, 8 Apr 2025 10:49:11 GMT (envelope-from git) Date: Tue, 8 Apr 2025 10:49:11 GMT Message-Id: <202504081049.538AnBRE002055@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 02ecd34fde77 - main - sys: Use fdt_foreach on arm, arm64, and riscv List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 02ecd34fde778dd5d73bd3ba3de24aa853734ac9 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=02ecd34fde778dd5d73bd3ba3de24aa853734ac9 commit 02ecd34fde778dd5d73bd3ba3de24aa853734ac9 Author: Andrew Turner AuthorDate: 2025-04-08 10:30:33 +0000 Commit: Andrew Turner CommitDate: 2025-04-08 10:48:28 +0000 sys: Use fdt_foreach on arm, arm64, and riscv This means we can remove the fixed mem_regions array. Reviewed by: imp Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D49700 --- sys/arm/arm/machdep.c | 26 +++++++++++++------ sys/arm64/arm64/machdep.c | 24 ++++++++++++------ sys/riscv/riscv/machdep.c | 63 ++++++++++++++++++++++++++++++----------------- 3 files changed, 76 insertions(+), 37 deletions(-) diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 31f888313d59..7db5a6f9bcdd 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -415,14 +415,26 @@ arm_kdb_init(void) } #ifdef FDT +static void +fdt_physmem_hardware_region_cb(const struct mem_region *mr, void *arg __unused) +{ + physmem_hardware_region(mr->mr_start, mr->mr_size); +} + +static void +fdt_physmem_exclude_region_cb(const struct mem_region *mr, void *arg __unused) +{ + physmem_exclude_region(mr->mr_start, mr->mr_size, + EXFLAG_NODUMP | EXFLAG_NOALLOC); +} + void * initarm(struct arm_boot_params *abp) { - struct mem_region mem_regions[FDT_MEM_REGIONS]; vm_paddr_t lastaddr; vm_offset_t dtbp, kernelstack, dpcpu; char *env; - int err_devmap, mem_regions_sz; + int err_devmap; phandle_t root; char dts_version[255]; #ifdef EFI @@ -469,15 +481,13 @@ initarm(struct arm_boot_params *abp) #endif { /* Grab physical memory regions information from device tree. */ - if (fdt_get_mem_regions(mem_regions, &mem_regions_sz,NULL) != 0) + if (fdt_foreach_mem_region(fdt_physmem_hardware_region_cb, + NULL) != 0) panic("Cannot get physical memory regions"); - physmem_hardware_regions(mem_regions, mem_regions_sz); - /* Grab reserved memory regions information from device tree. */ - if (fdt_get_reserved_regions(mem_regions, &mem_regions_sz) == 0) - physmem_exclude_regions(mem_regions, mem_regions_sz, - EXFLAG_NODUMP | EXFLAG_NOALLOC); + fdt_foreach_reserved_region(fdt_physmem_exclude_region_cb, + NULL); } /* diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c index 93343a1972af..6184ce937b8a 100644 --- a/sys/arm64/arm64/machdep.c +++ b/sys/arm64/arm64/machdep.c @@ -722,6 +722,21 @@ memory_mapping_mode(vm_paddr_t pa) return (VM_MEMATTR_DEVICE); } +#ifdef FDT +static void +fdt_physmem_hardware_region_cb(const struct mem_region *mr, void *arg __unused) +{ + physmem_hardware_region(mr->mr_start, mr->mr_size); +} + +static void +fdt_physmem_exclude_region_cb(const struct mem_region *mr, void *arg __unused) +{ + physmem_exclude_region(mr->mr_start, mr->mr_size, + EXFLAG_NODUMP | EXFLAG_NOALLOC); +} +#endif + void initarm(struct arm64_bootparams *abp) { @@ -729,8 +744,6 @@ initarm(struct arm64_bootparams *abp) struct pcpu *pcpup; char *env; #ifdef FDT - struct mem_region mem_regions[FDT_MEM_REGIONS]; - int mem_regions_sz; phandle_t root; char dts_version[255]; #endif @@ -781,14 +794,11 @@ initarm(struct arm64_bootparams *abp) #ifdef FDT else { /* Grab physical memory regions information from device tree. */ - if (fdt_get_mem_regions(mem_regions, &mem_regions_sz, + if (fdt_foreach_mem_region(fdt_physmem_hardware_region_cb, NULL) != 0) panic("Cannot get physical memory regions"); - physmem_hardware_regions(mem_regions, mem_regions_sz); } - if (fdt_get_reserved_mem(mem_regions, &mem_regions_sz) == 0) - physmem_exclude_regions(mem_regions, mem_regions_sz, - EXFLAG_NODUMP | EXFLAG_NOALLOC); + fdt_foreach_reserved_mem(fdt_physmem_exclude_region_cb, NULL); #endif /* Exclude the EFI framebuffer from our view of physical memory. */ diff --git a/sys/riscv/riscv/machdep.c b/sys/riscv/riscv/machdep.c index fea4ca9a7b92..516dbde5ffaa 100644 --- a/sys/riscv/riscv/machdep.c +++ b/sys/riscv/riscv/machdep.c @@ -506,13 +506,46 @@ parse_metadata(void) return (lastaddr); } +#ifdef FDT +static void +fdt_physmem_hardware_region_cb(const struct mem_region *mr, void *arg) +{ + bool *first = arg; + + physmem_hardware_region(mr->mr_start, mr->mr_size); + + if (*first) { + /* + * XXX: Unconditionally exclude the lowest 2MB of physical + * memory, as this area is assumed to contain the SBI firmware, + * and this is not properly reserved in all cases (e.g. in + * older firmware like BBL). + * + * This is a little fragile, but it is consistent with the + * platforms we support so far. + * + * TODO: remove this when the all regular booting methods + * properly report their reserved memory in the device tree. + */ + physmem_exclude_region(mr->mr_start, L2_SIZE, + EXFLAG_NODUMP | EXFLAG_NOALLOC); + *first = false; + } +} + +static void +fdt_physmem_exclude_region_cb(const struct mem_region *mr, void *arg __unused) +{ + physmem_exclude_region(mr->mr_start, mr->mr_size, + EXFLAG_NODUMP | EXFLAG_NOALLOC); +} +#endif + void initriscv(struct riscv_bootparams *rvbp) { - struct mem_region mem_regions[FDT_MEM_REGIONS]; struct efi_map_header *efihdr; struct pcpu *pcpup; - int mem_regions_sz; vm_offset_t lastaddr; vm_size_t kernlen; char *env; @@ -547,31 +580,17 @@ initriscv(struct riscv_bootparams *rvbp) } #ifdef FDT else { + bool first; + /* Exclude reserved memory specified by the device tree. */ - if (fdt_get_reserved_mem(mem_regions, &mem_regions_sz) == 0) { - physmem_exclude_regions(mem_regions, mem_regions_sz, - EXFLAG_NODUMP | EXFLAG_NOALLOC); - } + fdt_foreach_reserved_mem(fdt_physmem_exclude_region_cb, NULL); /* Grab physical memory regions information from device tree. */ - if (fdt_get_mem_regions(mem_regions, &mem_regions_sz, NULL) != 0) + first = true; + if (fdt_foreach_mem_region(fdt_physmem_hardware_region_cb, + &first) != 0) panic("Cannot get physical memory regions"); - physmem_hardware_regions(mem_regions, mem_regions_sz); - /* - * XXX: Unconditionally exclude the lowest 2MB of physical - * memory, as this area is assumed to contain the SBI firmware, - * and this is not properly reserved in all cases (e.g. in - * older firmware like BBL). - * - * This is a little fragile, but it is consistent with the - * platforms we support so far. - * - * TODO: remove this when the all regular booting methods - * properly report their reserved memory in the device tree. - */ - physmem_exclude_region(mem_regions[0].mr_start, L2_SIZE, - EXFLAG_NODUMP | EXFLAG_NOALLOC); } #endif