From nobody Thu Apr 16 22:39:54 2026 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 4fxXyL6fQZz6Zp0r for ; Thu, 16 Apr 2026 22:39:54 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fxXyL5dDJz3Q7w for ; Thu, 16 Apr 2026 22:39:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776379194; 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=YMOoHkWts2C6my9WpOl1hiXNtaTyHmeaP5/X5M1wxAM=; b=e1sCXnYOgQ3+zugsnRilfacEDr6Sla6E2lk/CJYBtcjtvvqH6QGJ3pz7OH06+QklP3vCI1 2rTi4tb1D3dHChUnu1sXZHkwEwPdoJ7zEsGHuGTFWw3SOIjCQpAm9NL9cvJhtiWZL9mmyb lk4LIscvHg+INi9fLQCqEpzCudnWzVk52p3yljkc4M7PwzB4zyUDj08aNoHCbn8lSTle4u 7QoAcSnJJ2XcjZUXTmO7ire2OYFkE2ihUD0hapgL7rkQoKKn+iukJwil6d6bCPUX3z71nz cW39v5uK6YZO9kwN3lJ/hbzBMvuwfYnzX8XncFqmAiL2cEa3IOXq/Qp02PA2cQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776379194; a=rsa-sha256; cv=none; b=D13my+P1ised4CQY1HITMMGcj3jcr3xZxgTEHyD7PxBZPKN/IBPVnQQT1OxhADfO0MadJX k2keU47OLpDVeAVWDNh2NLyZbSaTVJJQpC8seAKVju7KcMPT69eo8/slJp2OkX52aK36IZ 8pYHJ8WK4iGc1w0W9dDB37MFZIMZVPBRL+2nlo/av8cWPjJZhBUqkvQA0riE18JEZpvWlj ubLQpcyto+GWnhNVgX5XYVasH4XTmWBB9RPdzFGlbol1ElTG69Nbvsuhcnl5fwKOY9VSun gIGvnqdbGJu4n54l2HPu2r8M+icBP2MI7wEyUP6P9j4paXoq9qfPuFAcZDIJ1w== 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=1776379194; 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=YMOoHkWts2C6my9WpOl1hiXNtaTyHmeaP5/X5M1wxAM=; b=KUeBQAJXPwQnkcb4TArZYa3WpERKrHaj5pO0RKb1PUt5qmTSByX9ohDGg2/pQmCNmoIM3B CEW4bHVI9x/80Dlsl5OSCA8Vi1lwTEaOSljm4cOa8PcdeYyv0vC6HZvhCjuDCRjAOV/LYL qbzM2CSvlpaYymtZkVGmL2Ei38qfY3niRTuTgmZ8MSAMgZ/JF0SjBeRJzqxvCYfG/q9rH+ wn5yQY7YIyxXN+x0TACMXrGj6lLAttM1MUdSo2vijTw44BPraGdxh4rAGEK2CRMihjf+6R AJncMiRBKx+mz5ELyTJDYIQAfUvDUIwhnYJSY7T40S6ZkLwGUf4cAcAvn4si1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxXyL4YQcz9xv for ; Thu, 16 Apr 2026 22:39:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 347b8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 16 Apr 2026 22:39:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: 1fc50a4e68a1 - main - powerpc/pmap: Add support for page sizes found on E6500 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: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1fc50a4e68a1635f76d24694fc6ea8b94193c087 Auto-Submitted: auto-generated Date: Thu, 16 Apr 2026 22:39:54 +0000 Message-Id: <69e1653a.347b8.5fe0671a@gitrepo.freebsd.org> The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=1fc50a4e68a1635f76d24694fc6ea8b94193c087 commit 1fc50a4e68a1635f76d24694fc6ea8b94193c087 Author: Justin Hibbits AuthorDate: 2026-02-01 03:44:21 +0000 Commit: Justin Hibbits CommitDate: 2026-04-16 22:35:52 +0000 powerpc/pmap: Add support for page sizes found on E6500 E6500 cores (MMUv2) support all powers-of-2 page sizes from 4k to 1TB, not just powers of 4. By using the other page sizes (8k, 32k, etc) we can save on TLB1 space, saving up to ~1/3 of used TLB1 entries. --- sys/powerpc/booke/pmap.c | 23 +++++++++++++++++------ sys/powerpc/include/spr.h | 5 +++++ sys/powerpc/include/tlb.h | 28 ++++++++++++++-------------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index 08516b151e6b..a76ef6a089fd 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -177,6 +177,7 @@ static struct mtx copy_page_mutex; #endif static struct mtx tlbivax_mutex; +static bool mmuv2; /**************************************************************************/ /* PMAP */ @@ -640,6 +641,9 @@ mmu_booke_bootstrap(vm_offset_t start, vm_offset_t kernelend) debugf("mmu_booke_bootstrap: entered\n"); + if ((mfspr(SPR_MMUCFG) & MMUCFG_MAVN_M) > 0) + mmuv2 = true; + /* Set interesting system properties */ #ifdef __powerpc64__ hw_direct_map = 1; @@ -2703,7 +2707,7 @@ tsize2size(unsigned int tsize) * size = 4^tsize * 2^10 = 2^(2 * tsize - 10) */ - return ((1 << (2 * tsize)) * 1024); + return ((1UL << tsize) * 1024); } /* @@ -2713,7 +2717,7 @@ static unsigned int size2tsize(vm_size_t size) { - return (ilog2(size) / 2 - 5); + return (ilog2(size) - 10); } /* @@ -2772,23 +2776,29 @@ tlb1_mapin_region(vm_offset_t va, vm_paddr_t pa, vm_size_t size, int wimge) { vm_offset_t base; vm_size_t mapped, sz, ssize; + int shift; mapped = 0; base = va; ssize = size; + if (mmuv2) + shift = 1; + else + shift = 2; + while (size > 0) { - sz = 1UL << (ilog2(size) & ~1); + sz = 1UL << (ilog2(size) & ~(shift - 1)); /* Align size to PA */ if (pa % sz != 0) { do { - sz >>= 2; + sz >>= shift; } while (pa % sz != 0); } /* Now align from there to VA */ if (va % sz != 0) { do { - sz >>= 2; + sz >>= shift; } while (va % sz != 0); } #ifdef __powerpc64__ @@ -2805,7 +2815,8 @@ tlb1_mapin_region(vm_offset_t va, vm_paddr_t pa, vm_size_t size, int wimge) * For now, though, since we have plenty of space in TLB1, * always avoid creating entries larger than 4GB. */ - sz = MIN(sz, 1UL << 32); + if (!mmuv2) + sz = MIN(sz, 1UL << 32); #endif if (bootverbose) printf("Wiring VA=%p to PA=%jx (size=%lx)\n", diff --git a/sys/powerpc/include/spr.h b/sys/powerpc/include/spr.h index 605b1be194d9..5c6e9d67fcb4 100644 --- a/sys/powerpc/include/spr.h +++ b/sys/powerpc/include/spr.h @@ -864,5 +864,10 @@ #define BUCSR_BPEN 0x00000001 /* Branch Prediction Enable */ #define BUCSR_BBFI 0x00000200 /* Branch Buffer Flash Invalidate */ +#define SPR_MMUCFG 0x3f7 /* ..8 MMU Configuration Register */ +#define MMUCFG_PIDSIZE_M 0x000007c0 +#define MMUCFG_PIDSIZE_S 6 +#define MMUCFG_MAVN_M 0x00000003 + #endif /* BOOKE */ #endif /* !_POWERPC_SPR_H_ */ diff --git a/sys/powerpc/include/tlb.h b/sys/powerpc/include/tlb.h index 0a4463e0b928..33d31efab604 100644 --- a/sys/powerpc/include/tlb.h +++ b/sys/powerpc/include/tlb.h @@ -50,20 +50,20 @@ #define MAS1_TID_SHIFT 16 #define MAS1_TS_MASK 0x00001000 #define MAS1_TS_SHIFT 12 -#define MAS1_TSIZE_MASK 0x00000F00 -#define MAS1_TSIZE_SHIFT 8 - -#define TLB_SIZE_4K 1 -#define TLB_SIZE_16K 2 -#define TLB_SIZE_64K 3 -#define TLB_SIZE_256K 4 -#define TLB_SIZE_1M 5 -#define TLB_SIZE_4M 6 -#define TLB_SIZE_16M 7 -#define TLB_SIZE_64M 8 -#define TLB_SIZE_256M 9 -#define TLB_SIZE_1G 10 -#define TLB_SIZE_4G 11 +#define MAS1_TSIZE_MASK 0x00000F80 +#define MAS1_TSIZE_SHIFT 7 + +#define TLB_SIZE_4K 2 +#define TLB_SIZE_16K 4 +#define TLB_SIZE_64K 6 +#define TLB_SIZE_256K 8 +#define TLB_SIZE_1M 10 +#define TLB_SIZE_4M 12 +#define TLB_SIZE_16M 14 +#define TLB_SIZE_64M 16 +#define TLB_SIZE_256M 18 +#define TLB_SIZE_1G 20 +#define TLB_SIZE_4G 22 #ifdef __powerpc64__ #define MAS2_EPN_MASK 0xFFFFFFFFFFFFF000UL