svn commit: r238958 - user/jceel/soc2012_armv6/sys/arm/arm
Jakub Wojciech Klama
jceel at FreeBSD.org
Tue Jul 31 22:24:45 UTC 2012
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)
{
More information about the svn-src-user
mailing list