From owner-svn-src-user@FreeBSD.ORG Tue Jul 31 22:24:45 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 514F3106566B; Tue, 31 Jul 2012 22:24:45 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3A5D28FC14; Tue, 31 Jul 2012 22:24:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q6VMOj4v079165; Tue, 31 Jul 2012 22:24:45 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q6VMOjbC079161; Tue, 31 Jul 2012 22:24:45 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201207312224.q6VMOjbC079161@svn.freebsd.org> From: Jakub Wojciech Klama Date: Tue, 31 Jul 2012 22:24:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238958 - user/jceel/soc2012_armv6/sys/arm/arm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jul 2012 22:24:45 -0000 Author: jceel Date: Tue Jul 31 22:24:44 2012 New Revision: 238958 URL: http://svn.freebsd.org/changeset/base/238958 Log: * Apply pmap_devmap enhancements to ARMv6 pmap. * Fix setting sc->gic_dev in GIC driver * Apply execute bit to vectors page (relevant on ARMv6) Modified: user/jceel/soc2012_armv6/sys/arm/arm/gic.c user/jceel/soc2012_armv6/sys/arm/arm/machdep.c user/jceel/soc2012_armv6/sys/arm/arm/pmap-v6.c Modified: user/jceel/soc2012_armv6/sys/arm/arm/gic.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/gic.c Tue Jul 31 19:41:12 2012 (r238957) +++ user/jceel/soc2012_armv6/sys/arm/arm/gic.c Tue Jul 31 22:24:44 2012 (r238958) @@ -166,7 +166,9 @@ arm_gic_attach(device_t dev) if (bus_alloc_resources(dev, arm_gic_spec, sc->gic_res)) { device_printf(dev, "could not allocate resources\n"); return (ENXIO); - } + } + + sc->gic_dev = dev; /* Distributor Interface */ sc->gic_d_bst = rman_get_bustag(sc->gic_res[0]); @@ -282,7 +284,7 @@ static void arm_gic_unmask(device_t dev, int irq) { struct arm_gic_softc *sc = device_get_softc(dev); - + gic_c_write_4(sc, GICC_EOIR, irq); gic_d_write_4(sc, GICD_ISENABLER(irq >> 5), (1UL << (irq & 0x1F))); } Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Tue Jul 31 19:41:12 2012 (r238957) +++ user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Tue Jul 31 22:24:44 2012 (r238958) @@ -883,7 +883,7 @@ arm_bootstrap_pagetables(uint32_t memsiz /* Link and map vectors page */ pmap_link_l2pt(l1pt->pv_va, ARM_VECTORS_HIGH, &l2pt[l2_needed - 1]); pmap_map_entry(l1pt->pv_va, ARM_VECTORS_HIGH, vectors->pv_pa, - VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, PTE_CACHE); /* Map kernel and structures */ pmap_map_chunk(l1pt->pv_va, arm_start_va, arm_start_pa, Modified: user/jceel/soc2012_armv6/sys/arm/arm/pmap-v6.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/pmap-v6.c Tue Jul 31 19:41:12 2012 (r238957) +++ user/jceel/soc2012_armv6/sys/arm/arm/pmap-v6.c Tue Jul 31 22:24:44 2012 (r238958) @@ -3713,7 +3713,10 @@ pmap_devmap_bootstrap(vm_offset_t l1pt, pmap_devmap_table = table; - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { + for (i = 0; pmap_devmap_table[i].pd_size != 0 || pmap_devmap_table[i].pd_name != NULL ; i++) { + if (pmap_devmap_table[i].pd_size == 0) + continue; + #ifdef VERBOSE_INIT_ARM printf("devmap: %08x -> %08x @ %08x\n", pmap_devmap_table[i].pd_pa, @@ -3733,17 +3736,18 @@ const struct pmap_devmap * pmap_devmap_find_pa(vm_paddr_t pa, vm_size_t size) { int i; - + if (pmap_devmap_table == NULL) return (NULL); - - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { + + for (i = 0; pmap_devmap_table[i].pd_name != NULL || + pmap_devmap_table[i].pd_size != 0; i++) { if (pa >= pmap_devmap_table[i].pd_pa && pa + size <= pmap_devmap_table[i].pd_pa + pmap_devmap_table[i].pd_size) return (&pmap_devmap_table[i]); } - + return (NULL); } @@ -3755,7 +3759,8 @@ pmap_devmap_find_va(vm_offset_t va, vm_s if (pmap_devmap_table == NULL) return (NULL); - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { + for (i = 0; pmap_devmap_table[i].pd_name != NULL || + pmap_devmap_table[i].pd_size != 0; i++) { if (va >= pmap_devmap_table[i].pd_va && va + size <= pmap_devmap_table[i].pd_va + pmap_devmap_table[i].pd_size) @@ -3765,6 +3770,23 @@ pmap_devmap_find_va(vm_offset_t va, vm_s return (NULL); } +const struct pmap_devmap * +pmap_devmap_find_name(const char *name) +{ + int i; + + if (pmap_devmap_table == NULL) + return (NULL); + + for (i = 0; pmap_devmap_table[i].pd_name != NULL || + pmap_devmap_table[i].pd_size != 0; i++) { + if (!strcmp(name, pmap_devmap_table[i].pd_name)) + return (&pmap_devmap_table[i]); + } + + return (NULL); +} + int pmap_dmap_iscurrent(pmap_t pmap) {