From nobody Thu May 15 15:28:00 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 4ZyvH436btz5wVPC; Thu, 15 May 2025 15:28:00 +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 4ZyvH41nMhz46R8; Thu, 15 May 2025 15:28:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747322880; 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=LEB+LpmajUHolxP8UWc8RQO3o8/0D2zdC8g0w5gDlR4=; b=NDC2xEumoxyJ3ipPC0+GAsEruGjbnitpNk20Yg49Ng2mhV8LkL6hizLxRCqT9WqBr1joIM nrXBLWd+VqNy5lW8KDxQcHx6lBVuNwH7shP+wgqCS1a2mghLka+FM1Ol1SO6Oej68LDsOI kSMA4gcuBVB4p6BvpCK0A9yqSuvdaQfXud0SIr8AFPC/sK+14IlLKAbB2b08Yj5llLnMRb Prwlbl2hMnVq1c659fT3uFKb/AAS397zc6DXADq2yCn8sCA2k2O7ZZmvgENYjfRgyA0NAW SRUfp0C1cOXZHG7wHqPckHhBIFec8ilIPy3MKZazGIGhRpgEIvD3OyaKoEoUbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747322880; 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=LEB+LpmajUHolxP8UWc8RQO3o8/0D2zdC8g0w5gDlR4=; b=kaxlm0xkCbQqDvMIJULNpqQZbu3KeV9hE+xIWbHbwZvixstjrpWcgFMvUBBbYHtFTVaNdM UgWVdzXhcyravym/41FFZaPyBbpRqCNo12gCijgqfTekYoAAXN9SLpk+ati9kQLl9k2raS dmfUIfS1IHaWx5tLHKpohhwm7B1jyH1yuXD8Hi//fqV9uPo28SlgF4m56dO1z5pHZwjI+S jA9tf7w4FDO5jXZOfGxUEmjgcXHGRGBvfPmlMaqnFAf/uedGcJlTs6FpqW8Ax/9QvZ2has cUKiJXPXz1X29BTPW1c5uLA8CY/oES9woPtlmO97Vl6yOd7YnHJ4bT8mJds/lw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1747322880; a=rsa-sha256; cv=none; b=fbuoJgNotSN2tz46GOEB+Mv8rGrBLRhCg0rD4vu9RBVsr1lwHlQhF/Kf7e+z01cCoD1/G2 DbOqrh2dfpks2FplSUSmmde9U2DEUdPaeRrzapQoXMQGBi+9IaIljFepmkLtUb7J0Q41ed hjFO5QMXoffCcCXf5ckT3vuMtm7VMNsHLsD5NF/859U/BroTCnxjV9yELDbcMyGfnZ+IWu qkVuNzqjbJMF9e3T7E8QSA6JtijsWPcsMxnxABSDdPr2Lc4cc8TMkLHSdjWEgp5IGFDQp3 RmVGvffjUmMrm0xOFQ/PNaHM8+weyBI5TfoLdH3luBsX1SEZq9aEmD6T6jORGA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4ZyvH41Hx8z7rw; Thu, 15 May 2025 15:28:00 +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 54FFS0F3071531; Thu, 15 May 2025 15:28:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54FFS0ux071528; Thu, 15 May 2025 15:28:00 GMT (envelope-from git) Date: Thu, 15 May 2025 15:28:00 GMT Message-Id: <202505151528.54FFS0ux071528@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: ebeeeae67845 - main - subr_devmap: Implement pmap_mapdev with pmap_mapdev_attr 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: ebeeeae678455dcb47846925176d825fc0dbd792 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=ebeeeae678455dcb47846925176d825fc0dbd792 commit ebeeeae678455dcb47846925176d825fc0dbd792 Author: Andrew Turner AuthorDate: 2025-05-15 15:07:09 +0000 Commit: Andrew Turner CommitDate: 2025-05-15 15:09:46 +0000 subr_devmap: Implement pmap_mapdev with pmap_mapdev_attr We can now support pmap_mapdev_attr on arm. Switch to use this to implement pmap_mapdev to reduce duplicate code. Reviewed by: mhorne, mmel Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D50309 --- sys/arm/include/pmap.h | 8 +------- sys/kern/subr_devmap.c | 51 ++++++++++++-------------------------------------- 2 files changed, 13 insertions(+), 46 deletions(-) diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h index dcd4e0a83ab1..87f4065f6ff4 100644 --- a/sys/arm/include/pmap.h +++ b/sys/arm/include/pmap.h @@ -172,15 +172,9 @@ void pmap_page_set_memattr(vm_page_t, vm_memattr_t); #define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva) void *pmap_mapdev(vm_paddr_t, vm_size_t); +void *pmap_mapdev_attr(vm_paddr_t, vm_size_t, vm_memattr_t); void pmap_unmapdev(void *, vm_size_t); -static inline void * -pmap_mapdev_attr(vm_paddr_t addr __unused, vm_size_t size __unused, - int attr __unused) -{ - panic("%s is not implemented yet!\n", __func__); -} - struct pcb; void pmap_set_pcb_pagedir(pmap_t, struct pcb *); diff --git a/sys/kern/subr_devmap.c b/sys/kern/subr_devmap.c index d9026dd97311..2e86d11c7ad3 100644 --- a/sys/kern/subr_devmap.c +++ b/sys/kern/subr_devmap.c @@ -249,44 +249,9 @@ devmap_vtop(void * vpva, vm_size_t size) void * pmap_mapdev(vm_paddr_t pa, vm_size_t size) { - vm_offset_t va, offset; -#ifdef __HAVE_STATIC_DEVMAP - void * rva; - - /* First look in the static mapping table. */ - if ((rva = devmap_ptov(pa, size)) != NULL) - return (rva); -#endif - - offset = pa & PAGE_MASK; - pa = trunc_page(pa); - size = round_page(size + offset); - -#if defined(__aarch64__) || defined(__riscv) - if (early_boot) { - akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); - va = akva_devmap_vaddr; - KASSERT(va >= VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE, - ("%s: Too many early devmap mappings", __func__)); - } else -#endif -#ifdef __aarch64__ - if (size >= L2_SIZE && (pa & L2_OFFSET) == 0) - va = kva_alloc_aligned(size, L2_SIZE); - else if (size >= L3C_SIZE && (pa & L3C_OFFSET) == 0) - va = kva_alloc_aligned(size, L3C_SIZE); - else -#endif - va = kva_alloc(size); - if (!va) - panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); - - pmap_kenter_device(va, size, pa); - - return ((void *)(va + offset)); + return (pmap_mapdev_attr(pa, size, VM_MEMATTR_DEVICE)); } -#if defined(__aarch64__) || defined(__riscv) void * pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) { @@ -294,21 +259,30 @@ pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) #ifdef __HAVE_STATIC_DEVMAP void * rva; - /* First look in the static mapping table. */ - if ((rva = devmap_ptov(pa, size)) != NULL) + /* + * First look in the static mapping table. These are all mapped + * as device memory, so only use the devmap for VM_MEMATTR_DEVICE. + */ + if ((rva = devmap_ptov(pa, size)) != NULL) { + KASSERT(ma == VM_MEMATTR_DEVICE, + ("%s: Non-device mapping for pa %jx (type %x)", __func__, + (uintmax_t)pa, ma)); return (rva); + } #endif offset = pa & PAGE_MASK; pa = trunc_page(pa); size = round_page(size + offset); +#ifdef PMAP_MAPDEV_EARLY_SIZE if (early_boot) { akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); va = akva_devmap_vaddr; KASSERT(va >= (VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE), ("%s: Too many early devmap mappings", __func__)); } else +#endif #ifdef __aarch64__ if (size >= L2_SIZE && (pa & L2_OFFSET) == 0) va = kva_alloc_aligned(size, L2_SIZE); @@ -324,7 +298,6 @@ pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) return ((void *)(va + offset)); } -#endif /* * Unmap device memory and free the kva space.