Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Jul 2012 22:24:44 +0000 (UTC)
From:      Jakub Wojciech Klama <jceel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r238958 - user/jceel/soc2012_armv6/sys/arm/arm
Message-ID:  <201207312224.q6VMOjbC079161@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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)
 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207312224.q6VMOjbC079161>