Changeset 088b334 in mainline for boot/arch/arm32/src/mm.c


Ignore:
Timestamp:
2013-02-24T11:24:16Z (12 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8ab339e, b42c8d8
Parents:
df64dbc (diff), 9ad289d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge initial Beaglebone support from lp:helenos-bbone

File:
1 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/arm32/src/mm.c

    rdf64dbc r088b334  
    3838#include <arch/mm.h>
    3939
     40/** Disable the MMU */
     41static void disable_paging(void)
     42{
     43        asm volatile (
     44                "mrc p15, 0, r0, c1, c0, 0\n"
     45                "bic r0, r0, #1\n"
     46                "mcr p15, 0, r0, c1, c0, 0\n"
     47                ::: "r0"
     48        );
     49}
     50
    4051/** Check if caching can be enabled for a given memory section.
    4152 *
     
    5970        const unsigned long address = section << PTE_SECTION_SHIFT;
    6071        if (address >= BBXM_RAM_START && address < BBXM_RAM_END)
     72                return 1;
     73#elif defined MACHINE_beaglebone
     74        const unsigned long address = section << PTE_SECTION_SHIFT;
     75        if (address >= AM335x_RAM_START && address < AM335x_RAM_END)
    6176                return 1;
    6277#endif
     
    88103        pte->tex = 0;
    89104        pte->access_permission_1 = 0;
     105        pte->shareable = 0;
    90106        pte->non_global = 0;
    91107        pte->should_be_zero_2 = 0;
     
    102118        for (page = 0; page < split_page; page++)
    103119                init_ptl0_section(&boot_pt[page], page);
    104        
    105         /*
    106          * Create 1:1 virtual-physical mapping in kernel space
    107          * (upper 2 GB), physical addresses start from 0.
    108          */
    109         /* BeagleBoard-xM (DM37x) memory starts at 2GB border,
    110          * thus mapping only lower 2GB is not not enough.
    111          * Map entire AS 1:1 instead and hope it works. */
    112         for (page = split_page; page < PTL0_ENTRIES; page++)
    113 #ifndef MACHINE_beagleboardxm
    114                 init_ptl0_section(&boot_pt[page], page - split_page);
    115 #else
    116                 init_ptl0_section(&boot_pt[page], page);
    117 #endif
    118120       
    119121        asm volatile (
     
    132134                "ldr r0, =0x55555555\n"
    133135                "mcr p15, 0, r0, c3, c0, 0\n"
    134                
     136
    135137                /* Current settings */
    136138                "mrc p15, 0, r0, c1, c0, 0\n"
     
    143145               
    144146                "orr r0, r0, r1\n"
     147
     148                /* Invalidate the TLB content before turning on the MMU.
     149                 * ARMv7-A Reference manual, B3.10.3
     150                 */
     151                "mcr p15, 0, r0, c8, c7, 0\n"
    145152               
    146                 /* Store settings */
     153                /* Store settings, enable the MMU */
    147154                "mcr p15, 0, r0, c1, c0, 0\n"
    148155                ::: "r0", "r1"
     
    152159/** Start the MMU - initialize page table and enable paging. */
    153160void mmu_start() {
     161        disable_paging();
    154162        init_boot_pt();
    155163        enable_paging();
Note: See TracChangeset for help on using the changeset viewer.