From nobody Mon Mar 03 16:12:26 2025 X-Original-To: dev-commits-src-all@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 4Z63k417N9z5pjdn; Mon, 03 Mar 2025 16:12:28 +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 4Z63k32NNgz40WT; Mon, 03 Mar 2025 16:12:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741018347; 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=kLsh57pUjSnY8HLnuruog6//dBWYnU+8GyIIDdUQX/w=; b=sq3Tkkc1YFnOk018ASUj35CWyJ0G5BPO8LyjZdJWH7XqBsvBxz+Ie2dgeMVT2HGAXBWBaV OJbiG/rJLpqtfiW5K7+42HWoql+DVxmz+86JrhKRa4RllRdFqt9md0vzzifiluD37YiXUn F8lMZU52+gcD3CQd0nHlMdJJveMyHbTOHsy5EDrcYyzrvpBjCnVhnHRPvvqUQKKcu/BXCk rmDpZoSyh8sFRJE2TV4kp9/GuCcIR23hoDPzTqC+LPZk+syiXubilxirsS1XQilXBavTGF TjhLkOrSAujI2mN2OwT36O8mh78ezjm+6OYGtVDF7DKtQExe1IyP3rS3zD8JUA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741018347; a=rsa-sha256; cv=none; b=Iq4sb1eEUhf1FtT4m74JmIom+ubGPkGioIGuNcky2+OLNWa9r035NNg5RZyqwpDUU0Niz6 tL71CT9cSSG0QNdUoJdBJBtKHm/Gaer6q9wPxJF0KyyPO070WvRyv/vAc/DJUIJZIFzPV4 iO8LOWqAFAIu/AM5iEl/LDBR4nXOYu3aLI32Erx3Sus0RbrWjud//8PkrzFc1ctVRr9Bd1 aWrkqRpGPZZIb/z3GBEGUS/FSYPCbUOaPXUexx+4XMTGshZbO5x7u4WtGgihfK2DXPObvy OHJ7np0kKdqyznxjPPUkMCimlvnHnVjL0RPBynk/9dejODlEskYSU5xVHOQhHA== 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=1741018347; 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=kLsh57pUjSnY8HLnuruog6//dBWYnU+8GyIIDdUQX/w=; b=YME+JLLOhGuxHD5ccxOkf+EK5ds2DBhef6Hioq8CURZjXHmrb2MVBHwL54PMIfKl8FGenA wyN8RU1jfYLSDZjHg1fmOMi1e30O/tl4rW2siqx1PBPZ2Mcx6BBa/j8djenDhhj3z67mwj QNgjsGOmwYUmXSZpDzoDWk+abtf2BRfEfagIoPpEmBVfIEbWwHBSEvz1EhpxCaZ08IbLtd 3HNe2srdbcA+ESjjo+1bstgOEZCB2bAaRZL2E3JAqdGiU6L5KHEqeHE+03fOcD5Uq4i8Yv JEHnLRT9UxY1EgZB2PAXhrDktXuVZZhk+vamSpNqrPGvbD5s88GWKJgv25YotQ== 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 4Z63k30JqYzvLr; Mon, 03 Mar 2025 16:12:27 +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 523GCQDY007208; Mon, 3 Mar 2025 16:12:26 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 523GCQnR007205; Mon, 3 Mar 2025 16:12:26 GMT (envelope-from git) Date: Mon, 3 Mar 2025 16:12:26 GMT Message-Id: <202503031612.523GCQnR007205@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mitchell Horne Subject: git: 8bfd5cefbc71 - main - arm: switch to subr_efi_map.c List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8bfd5cefbc7143adffa34d74bc539802a01f0f26 Auto-Submitted: auto-generated The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=8bfd5cefbc7143adffa34d74bc539802a01f0f26 commit 8bfd5cefbc7143adffa34d74bc539802a01f0f26 Author: Mitchell Horne AuthorDate: 2025-03-03 15:45:32 +0000 Commit: Mitchell Horne CommitDate: 2025-03-03 16:12:15 +0000 arm: switch to subr_efi_map.c Reduce code duplication by switching to the new shared interface. Practically, the kernel may lose a few pages to (unused) EFI runtime services. Reviewed by: andrew Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49132 --- sys/arm/arm/machdep.c | 25 ++++++++--- sys/arm/arm/machdep_boot.c | 107 --------------------------------------------- sys/conf/files.arm | 1 + sys/kern/subr_efi_map.c | 4 +- 4 files changed, 21 insertions(+), 116 deletions(-) diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index e45ef9834e81..31f888313d59 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -462,20 +463,22 @@ initarm(struct arm_boot_params *abp) efihdr = (struct efi_map_header *)preload_search_info(preload_kmdp, MODINFO_METADATA | MODINFOMD_EFI_MAP); if (efihdr != NULL) { - arm_add_efi_map_entries(efihdr, mem_regions, &mem_regions_sz); + efi_map_add_entries(efihdr); + efi_map_exclude_entries(efihdr); } else #endif { /* Grab physical memory regions information from device tree. */ if (fdt_get_mem_regions(mem_regions, &mem_regions_sz,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); + 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); + } /* * Set TEX remapping registers. @@ -632,6 +635,14 @@ initarm(struct arm_boot_params *abp) arm_kdb_init(); /* Apply possible BP hardening. */ cpuinfo_init_bp_hardening(); + +#ifdef EFI + if (boothowto & RB_VERBOSE) { + if (efihdr != NULL) + efi_map_print_entries(efihdr); + } +#endif + return ((void *)STACKALIGN(thread0.td_pcb)); } diff --git a/sys/arm/arm/machdep_boot.c b/sys/arm/arm/machdep_boot.c index e2416f86ad23..8a6c63af3c92 100644 --- a/sys/arm/arm/machdep_boot.c +++ b/sys/arm/arm/machdep_boot.c @@ -389,110 +389,3 @@ fake_preload_metadata(struct arm_boot_params *abp __unused, void *dtb_ptr, return (lastaddr); } - -#ifdef EFI -void -arm_add_efi_map_entries(struct efi_map_header *efihdr, struct mem_region *mr, - int *mrcnt) -{ - struct efi_md *map, *p; - const char *type; - size_t efisz; - int ndesc, i, j; - - static const char *types[] = { - "Reserved", - "LoaderCode", - "LoaderData", - "BootServicesCode", - "BootServicesData", - "RuntimeServicesCode", - "RuntimeServicesData", - "ConventionalMemory", - "UnusableMemory", - "ACPIReclaimMemory", - "ACPIMemoryNVS", - "MemoryMappedIO", - "MemoryMappedIOPortSpace", - "PalCode", - "PersistentMemory" - }; - - *mrcnt = 0; - - /* - * Memory map data provided by UEFI via the GetMemoryMap - * Boot Services API. - */ - efisz = roundup2(sizeof(struct efi_map_header), 0x10); - map = (struct efi_md *)((uint8_t *)efihdr + efisz); - - if (efihdr->descriptor_size == 0) - return; - ndesc = efihdr->memory_size / efihdr->descriptor_size; - - if (boothowto & RB_VERBOSE) - printf("%23s %12s %12s %8s %4s\n", - "Type", "Physical", "Virtual", "#Pages", "Attr"); - - for (i = 0, j = 0, p = map; i < ndesc; i++, - p = efi_next_descriptor(p, efihdr->descriptor_size)) { - if (boothowto & RB_VERBOSE) { - if (p->md_type < nitems(types)) - type = types[p->md_type]; - else - type = ""; - printf("%23s %012llx %012llx %08llx ", type, p->md_phys, - p->md_virt, p->md_pages); - if (p->md_attr & EFI_MD_ATTR_UC) - printf("UC "); - if (p->md_attr & EFI_MD_ATTR_WC) - printf("WC "); - if (p->md_attr & EFI_MD_ATTR_WT) - printf("WT "); - if (p->md_attr & EFI_MD_ATTR_WB) - printf("WB "); - if (p->md_attr & EFI_MD_ATTR_UCE) - printf("UCE "); - if (p->md_attr & EFI_MD_ATTR_WP) - printf("WP "); - if (p->md_attr & EFI_MD_ATTR_RP) - printf("RP "); - if (p->md_attr & EFI_MD_ATTR_XP) - printf("XP "); - if (p->md_attr & EFI_MD_ATTR_NV) - printf("NV "); - if (p->md_attr & EFI_MD_ATTR_MORE_RELIABLE) - printf("MORE_RELIABLE "); - if (p->md_attr & EFI_MD_ATTR_RO) - printf("RO "); - if (p->md_attr & EFI_MD_ATTR_RT) - printf("RUNTIME"); - printf("\n"); - } - - switch (p->md_type) { - case EFI_MD_TYPE_CODE: - case EFI_MD_TYPE_DATA: - case EFI_MD_TYPE_BS_CODE: - case EFI_MD_TYPE_BS_DATA: - case EFI_MD_TYPE_FREE: - /* - * We're allowed to use any entry with these types. - */ - break; - default: - continue; - } - - j++; - if (j >= FDT_MEM_REGIONS) - break; - - mr[j].mr_start = p->md_phys; - mr[j].mr_size = p->md_pages * EFI_PAGE_SIZE; - } - - *mrcnt = j; -} -#endif /* EFI */ diff --git a/sys/conf/files.arm b/sys/conf/files.arm index 5ada97ccad30..0188dda87c96 100644 --- a/sys/conf/files.arm +++ b/sys/conf/files.arm @@ -108,6 +108,7 @@ kern/msi_if.m optional intrng kern/pic_if.m optional intrng kern/subr_busdma_bufalloc.c standard kern/subr_devmap.c standard +kern/subr_efi_map.c optional efi kern/subr_physmem.c standard kern/subr_sfbuf.c standard libkern/arm/aeabi_unwind.c standard diff --git a/sys/kern/subr_efi_map.c b/sys/kern/subr_efi_map.c index 29a94858f6c1..4085d7f1cdb9 100644 --- a/sys/kern/subr_efi_map.c +++ b/sys/kern/subr_efi_map.c @@ -139,8 +139,8 @@ print_efi_map_entry(struct efi_md *p, void *argp __unused) type = types[p->md_type]; else type = ""; - printf("%23s %012lx %012lx %08lx ", type, p->md_phys, - p->md_virt, p->md_pages); + printf("%23s %012jx %012jx %08jx ", type, (uintmax_t)p->md_phys, + (uintmax_t)p->md_virt, (uintmax_t)p->md_pages); if (p->md_attr & EFI_MD_ATTR_UC) printf("UC "); if (p->md_attr & EFI_MD_ATTR_WC)