From owner-svn-src-head@freebsd.org Wed Jun 20 16:07:36 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BD2D11021815; Wed, 20 Jun 2018 16:07:36 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6E46B820A1; Wed, 20 Jun 2018 16:07:36 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 30E9824742; Wed, 20 Jun 2018 16:07:36 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w5KG7apT013719; Wed, 20 Jun 2018 16:07:36 GMT (envelope-from manu@FreeBSD.org) Received: (from manu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w5KG7ZvL013716; Wed, 20 Jun 2018 16:07:35 GMT (envelope-from manu@FreeBSD.org) Message-Id: <201806201607.w5KG7ZvL013716@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: manu set sender to manu@FreeBSD.org using -f From: Emmanuel Vadot Date: Wed, 20 Jun 2018 16:07:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r335446 - in head/sys: arm64/arm64 arm64/include kern X-SVN-Group: head X-SVN-Commit-Author: manu X-SVN-Commit-Paths: in head/sys: arm64/arm64 arm64/include kern X-SVN-Commit-Revision: 335446 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jun 2018 16:07:37 -0000 Author: manu Date: Wed Jun 20 16:07:35 2018 New Revision: 335446 URL: https://svnweb.freebsd.org/changeset/base/335446 Log: Add pmap_mapdev_attr for arm64 This is needed for efifb. arm and ricv pmap (the two arch with arm64 that uses subr_devmap) have very different implementation so for now only add this for arm64. Tested with efifb on Pine64 with a few other patches. Reviewed by: cognet Differential Revision: https://reviews.freebsd.org/D15294 Modified: head/sys/arm64/arm64/pmap.c head/sys/arm64/include/pmap.h head/sys/kern/subr_devmap.c Modified: head/sys/arm64/arm64/pmap.c ============================================================================== --- head/sys/arm64/arm64/pmap.c Wed Jun 20 15:27:09 2018 (r335445) +++ head/sys/arm64/arm64/pmap.c Wed Jun 20 16:07:35 2018 (r335446) @@ -1142,7 +1142,7 @@ pmap_kextract(vm_offset_t va) * Low level mapping routines..... ***************************************************/ -static void +void pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode) { pd_entry_t *pde; Modified: head/sys/arm64/include/pmap.h ============================================================================== --- head/sys/arm64/include/pmap.h Wed Jun 20 15:27:09 2018 (r335445) +++ head/sys/arm64/include/pmap.h Wed Jun 20 16:07:35 2018 (r335446) @@ -140,10 +140,12 @@ extern vm_offset_t virtual_end; ((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE) void pmap_bootstrap(vm_offset_t, vm_offset_t, vm_paddr_t, vm_size_t); +void pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode); void pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t); vm_paddr_t pmap_kextract(vm_offset_t va); void pmap_kremove(vm_offset_t); void pmap_kremove_device(vm_offset_t, vm_size_t); +void *pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma); void *pmap_mapdev(vm_offset_t, vm_size_t); void *pmap_mapbios(vm_paddr_t, vm_size_t); Modified: head/sys/kern/subr_devmap.c ============================================================================== --- head/sys/kern/subr_devmap.c Wed Jun 20 15:27:09 2018 (r335445) +++ head/sys/kern/subr_devmap.c Wed Jun 20 16:07:35 2018 (r335446) @@ -287,6 +287,37 @@ pmap_mapdev(vm_offset_t pa, vm_size_t size) return ((void *)(va + offset)); } +#if defined(__aarch64__) +void * +pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma) +{ + vm_offset_t va, offset; + void * rva; + + /* First look in the static mapping table. */ + if ((rva = devmap_ptov(pa, size)) != NULL) + return (rva); + + offset = pa & PAGE_MASK; + pa = trunc_page(pa); + size = round_page(size + offset); + + if (early_boot) { + akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); + va = akva_devmap_vaddr; + KASSERT(va >= VM_MAX_KERNEL_ADDRESS - L2_SIZE, + ("Too many early devmap mappings")); + } else + va = kva_alloc(size); + if (!va) + panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); + + pmap_kenter(va, size, pa, ma); + + return ((void *)(va + offset)); +} +#endif + /* * Unmap device memory and free the kva space. */