replaces the early bus space map support with ways more elegant
    approach, by checking in the one-and-only bus_space_map function
    used by armv7 (simplebus_bs_map essentially uses the the same
    *bs_map()).
    also removes the unnecessary bs_protos(bs_notimpl); from
    armv7_machdep.c, which might break the build later, if left around.

diff --git a/sys/arch/arm/armv7/armv7_space.c b/sys/arch/arm/armv7/armv7_space.c
index c7e9b686b8f..64907252b76 100644
--- a/sys/arch/arm/armv7/armv7_space.c
+++ b/sys/arch/arm/armv7/armv7_space.c
@@ -170,7 +170,16 @@ armv7_bs_map(void *t, uint64_t bpa, bus_size_t size,
 {
        u_long startpa, endpa, pa;
        vaddr_t va;
-       int pmap_flags = PMAP_DEVICE;
+       int pmap_flags;
+       extern int bootstrap_bs_map(void *, uint64_t, bus_size_t,
+                   int, bus_space_handle_t *);
+
+       /*
+        * Once pmap_bootstrap() has ran, pm_refs will be > 0,
+        * and we should be ready to provide non-bootstrap mappings
+        */
+       if (pmap_kernel()->pm_refs == 0)
+               return bootstrap_bs_map(t, bpa, size, flags, bshp);
 
        startpa = trunc_page(bpa);
        endpa = round_page(bpa + size);
@@ -183,8 +192,7 @@ armv7_bs_map(void *t, uint64_t bpa, bus_size_t size,
 
        *bshp = (bus_space_handle_t)(va + (bpa - startpa));
 
-       if (flags & BUS_SPACE_MAP_CACHEABLE)
-               pmap_flags = 0;
+       pmap_flags = (flags & BUS_SPACE_MAP_CACHEABLE) ? 0 : PMAP_DEVICE;
 
        for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE)
                pmap_kenter_pa(va, pa | pmap_flags, PROT_READ | PROT_WRITE);
diff --git a/sys/arch/armv7/armv7/armv7_machdep.c 
b/sys/arch/armv7/armv7/armv7_machdep.c
index aa1c549b29b..f7b3f6baf83 100644
--- a/sys/arch/armv7/armv7/armv7_machdep.c
+++ b/sys/arch/armv7/armv7/armv7_machdep.c
@@ -204,8 +204,6 @@ int bootstrap_bs_map(void *, uint64_t, bus_size_t, int,
 void   process_kernel_args(char *);
 void   consinit(void);
 
-bs_protos(bs_notimpl);
-
 #ifndef CONSPEED
 #define CONSPEED B115200       /* What u-boot */
 #endif
@@ -384,11 +382,6 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t 
loadaddr)
        void *node;
        extern uint32_t esym; /* &_end if no symbols are loaded */
 
-       /* early bus_space_map support */
-       struct bus_space tmp_bs_tag;
-       int     (*map_func_save)(void *, uint64_t, bus_size_t, int,
-           bus_space_handle_t *);
-
        if (arg0)
                esym = (uint32_t)arg0;
 
@@ -407,19 +400,6 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t 
loadaddr)
                panic("cpu not recognized!");
 
        /*
-        * Temporarily replace bus_space_map() functions so that
-        * console devices can get mapped.
-        *
-        * Note that this relies upon the fact that both regular
-        * and a4x bus_space tags use the same map function.
-        */
-       tmp_bs_tag = armv7_bs_tag;
-       map_func_save = armv7_bs_tag.bs_map;
-       armv7_bs_tag.bs_map = bootstrap_bs_map;
-       armv7_a4x_bs_tag.bs_map = bootstrap_bs_map;
-       tmp_bs_tag.bs_map = bootstrap_bs_map;
-
-       /*
         * Now, map the FDT area.
         *
         * As we don't know the size of a possible FDT, map the size of a
@@ -772,12 +752,6 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t 
loadaddr)
 
        vector_page_setprot(PROT_READ | PROT_EXEC);
 
-       /*
-        * Restore proper bus_space operation, now that pmap is initialized.
-        */
-       armv7_bs_tag.bs_map = map_func_save;
-       armv7_a4x_bs_tag.bs_map = map_func_save;
-
 #ifdef DDB
        db_machine_init();
 

Reply via email to