From nobody Thu Jun 12 09:49:35 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 4bHyRg5bvvz5yVX4; Thu, 12 Jun 2025 09:49:35 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bHyRg4w3lz3cbT; Thu, 12 Jun 2025 09:49:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749721775; 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=udAYq2TZuqMIgCq8sOz8s0IatBiGTd2cOUwVQC7oy2c=; b=LNqRm+6p5ffKIaVcHnMPxbmJbN3robe9a8XDNfXRSrqGBkJaiR8wjzfNcDz/aqDcewsby0 amO7bMQjmq4RYgpZyDThKcCKFHYBCgR0ZG9A9ig1qmXTQSfwuRl9FREPstUseXTsOlwX0P 4uWy4IlT7TZHN352LiwoNszXXqYHOFdDfnrErjxDRbmw8UNP6avhyuEQp5/suFqPjHMqPL JDEsgtfKqjOmkhW4veYAuRuGtOkJGRUXHL/vV3pdynSIvxo2UlOlLh7HArg7qzP/Dx9TtL cjyRBjNVDcxtyLKakXtkupjbDSTZEY1dlDTdy5WALOHo2kpf1yEg6am5snLPZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749721775; 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=udAYq2TZuqMIgCq8sOz8s0IatBiGTd2cOUwVQC7oy2c=; b=X0fBKL3+l3NzEskQCrv6IiZZ4LQqg0V2vwPX5lcW5qvo29T/CrbPApgDbI9n38gr71nGks j0SSiJQB85V24mjGdyyz2PbgUpAKqSl4CHZCbUxuqbGZ4/iByhGpsL8i9fGevOXPPOzYMz n38ztjuxIIx2nXgFh0xH/Da1DFEct4G+NSGZX2tp9MptasyPu9GwEEy80o13D5ZAdHHRsd rdoSHfmbyUi1E+MiQRkRj/VXx2dxCmEUa5AD5i6/tBOEdZYgy2+eJCH3Q2CuFY/YdJEluv ZrMlupoHibpOYCwkMXNB3TRLKVLUy94JgJuPD6gLJCTw7Uuc4zMd1c6wupF5aw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1749721775; a=rsa-sha256; cv=none; b=YJI1s7rBlOugqx8M8S1MgRALSc49PxC8O41yUad4nOpudyga2RG5IwEpg03bX1V9kYgM/H oW3babD1NwvCIaqDbkH3RF5jxzKXvPx1Q1UJa03W6zj85f5wO57XhS1G0EbfTY1BHA8OvZ 4nz4lb+tNgAtQuwwtYcpb1ZLKrINijgrKdtPh9+7WvW/mK6Dn9DDJv/RsqH6HFoeF/nIf3 UC+CjELTvvKx+n5lMjJwIYRcNDAM0jGK5eoLvPmjMM3rX8p441MQBWQ3VHCh2Wktyc0Jzx TSXVzIrRCrZxwGi8DKWS5BDdKXn5A6bKdnTehuQumR/oqGHBvjDdMbudZppAJA== 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 4bHyRg4W55z1668; Thu, 12 Jun 2025 09:49:35 +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 55C9nZI7029554; Thu, 12 Jun 2025 09:49:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55C9nZF9029551; Thu, 12 Jun 2025 09:49:35 GMT (envelope-from git) Date: Thu, 12 Jun 2025 09:49:35 GMT Message-Id: <202506120949.55C9nZF9029551@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: 95059bef2437 - main - arm64: Use tables to find early page tables 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: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 95059bef24378248a1d22830c998924b2313f03f Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=95059bef24378248a1d22830c998924b2313f03f commit 95059bef24378248a1d22830c998924b2313f03f Author: Andrew Turner AuthorDate: 2025-06-12 09:32:16 +0000 Commit: Andrew Turner CommitDate: 2025-06-12 09:48:57 +0000 arm64: Use tables to find early page tables Use the existing lables to find the early page tables. This allows us to change the size and layout of these as needed, e.g. adding a new level. Reviewed by: alc Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D45062 --- sys/arm64/arm64/locore.S | 52 +++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/sys/arm64/arm64/locore.S b/sys/arm64/arm64/locore.S index 9cf23fcf13a1..1268d0d79193 100644 --- a/sys/arm64/arm64/locore.S +++ b/sys/arm64/arm64/locore.S @@ -84,7 +84,6 @@ ENTRY(_start) /* * At this point: * x27 = TTBR0 table - * x26 = Kernel L1 table * x24 = TTBR1 table * x22 = PTE shareability attributes * x21 = BTI guarded page attribute if supported @@ -481,7 +480,6 @@ LENTRY(create_pagetables) /* Clean the page table */ adrp x6, pagetable add x6, x6, :lo12:pagetable - mov x26, x6 adrp x27, pagetable_end add x27, x27, :lo12:pagetable_end 1: @@ -591,9 +589,11 @@ common: * with 2M alignment. */ #define PTE_SHIFT L3_SHIFT +#define LL_PAGE_TABLE pagetable_l3_ttbr1 #define BUILD_PTE_FUNC build_l3_page_pagetable #else #define PTE_SHIFT L2_SHIFT +#define LL_PAGE_TABLE pagetable_l2_ttbr1 #define BUILD_PTE_FUNC build_l2_block_pagetable #endif @@ -601,50 +601,48 @@ common: lsr x10, x8, #(PTE_SHIFT) /* Create the kernel space PTE table */ - mov x6, x26 + adrp x6, LL_PAGE_TABLE + add x6, x6, :lo12:LL_PAGE_TABLE mov x7, #(ATTR_S1_IDX(VM_MEMATTR_WRITE_BACK)) mov x8, #(KERNBASE) mov x9, x28 bl BUILD_PTE_FUNC #undef PTE_SHIFT +#undef LL_PAGE_TABLE #undef BUILD_PTE_FUNC #if PAGE_SIZE != PAGE_SIZE_4K - /* Move to the l2 table */ - ldr x9, =(PAGE_SIZE * L3_PAGE_COUNT) - add x26, x26, x9 - /* Link the l2 -> l3 table */ mov x9, x6 - mov x6, x26 + adrp x6, pagetable_l2_ttbr1 + add x6, x6, :lo12:pagetable_l2_ttbr1 bl link_l2_pagetable #endif - /* Move to the l1 table */ - add x26, x26, #PAGE_SIZE - /* Link the l1 -> l2 table */ mov x9, x6 - mov x6, x26 + adrp x6, pagetable_l1_ttbr1 + add x6, x6, :lo12:pagetable_l1_ttbr1 bl link_l1_pagetable - /* Move to the l0 table */ - add x24, x26, #PAGE_SIZE - /* Link the l0 -> l1 table */ mov x9, x6 - mov x6, x24 + adrp x6, pagetable_l0_ttbr1 + add x6, x6, :lo12:pagetable_l0_ttbr1 mov x10, #1 bl link_l0_pagetable + /* Save the TTBR1 table physical address */ + mov x24, x6 + /* * Build the TTBR0 maps. As TTBR0 maps, they must specify ATTR_S1_nG. * They are only needed early on, so the VA = PA map is uncached. */ - add x27, x24, #PAGE_SIZE - mov x6, x27 /* The initial page table */ + adrp x6, pagetable_l2_ttbr0_bootstrap + add x6, x6, :lo12:pagetable_l2_ttbr0_bootstrap /* Create the VA = PA map */ mov x7, #(ATTR_S1_nG | ATTR_S1_IDX(VM_MEMATTR_WRITE_BACK)) @@ -692,23 +690,22 @@ common: 1: #endif - /* Move to the l1 table */ - add x27, x27, #PAGE_SIZE - /* Link the l1 -> l2 table */ mov x9, x6 - mov x6, x27 + adrp x6, pagetable_l1_ttbr0_bootstrap + add x6, x6, :lo12:pagetable_l1_ttbr0_bootstrap bl link_l1_pagetable - /* Move to the l0 table */ - add x27, x27, #PAGE_SIZE - /* Link the l0 -> l1 table */ mov x9, x6 - mov x6, x27 + adrp x6, pagetable_l0_ttbr0_bootstrap + add x6, x6, :lo12:pagetable_l0_ttbr0_bootstrap mov x10, #1 bl link_l0_pagetable + /* Save the TTBR0 table physical address */ + mov x27, x6 + /* Restore the Link register */ mov x30, x5 ret @@ -1041,9 +1038,10 @@ initstack_end: .globl pagetable_l0_ttbr1 pagetable: #if PAGE_SIZE != PAGE_SIZE_4K +pagetable_l3_ttbr1: .space (PAGE_SIZE * L3_PAGE_COUNT) -pagetable_l2_ttbr1: #endif +pagetable_l2_ttbr1: .space PAGE_SIZE pagetable_l1_ttbr1: .space PAGE_SIZE