Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm64/src/start.S

    r06f10ac r84176f3  
    3535.section K_TEXT_START, "ax"
    3636
    37 .macro dcache_flush addr size temp0 temp1
    38         mov \temp0, \addr
    39         mov \temp1, xzr
    40 
    41         0:
    42                 /* Data or Unified Cache Line Clean */
    43                 dc cvau, \temp0
    44                 add \temp0, \temp0, #4
    45                 add \temp1, \temp1, #4
    46                 cmp \temp1, \size
    47                 blo 0b
    48 
    49         dsb ish
    50         isb
    51 .endm
    52 
    53 /** Kernel entry
    54  *
    55  * MMU must be disabled at this point.
    56  *
    57  * @param x0 Kernel entry point (kernel_image_start).
    58  * @param x1 Pointer to the bootinfo structure.
    59  *
    60  */
    6137SYMBOL(kernel_image_start)
     38        /*
     39         * Parameters:
     40         * x0 is kernel entry point (kernel_image_start).
     41         * x1 is pointer to the bootinfo structure.
     42         *
     43         * MMU must be disabled at this point.
     44         */
     45
    6246        /* Get address of the main memory and remember it. */
    6347        adrp x20, kernel_image_start - BOOT_OFFSET
    6448        adrp x2, physmem_base
     49        /* add x2, x2, #:lo12:physmem_base */
    6550        str x20, [x2]
    6651
    67         /* Flush the data cache of physmem_base. */
    68         mov x28, #8
    69         dcache_flush x2 x28 x29 x30
    70 
    71         /*
    72          * Set up address translation that identity maps the 1 GiB area that
     52        /*
     53         * Set up address translation that identity maps the gigabyte area that
    7354         * is holding the current execution page.
    7455         */
     
    9576        mov x3, #( \
    9677            1 << PTE_ACCESS_SHIFT | \
    97             MAIR_EL1_NORMAL_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
     78            MAIR_EL1_DEVICE_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
    9879            PTE_L012_TYPE_BLOCK << PTE_TYPE_SHIFT | \
    9980            1 << PTE_PRESENT_SHIFT)
     
    10384
    10485        /*
    105          * Set up address translation that maps the first 4 GiB of the kernel
    106          * identity virtual address space to the first 4 GiB of the physical
     86         * Set up address translation that maps the first gigabyte of the kernel
     87         * identity virtual address space to the first gigabyte of the physical
    10788         * memory.
    10889         */
    10990
    11091        mov x21, #KM_ARM64_IDENTITY_START
    111         ldr x22, =(1024 * 1024 * 1024)
    11292
    11393        /* Prepare the level 0 page table. */
     
    132112        mov x3, #( \
    133113            1 << PTE_ACCESS_SHIFT | \
    134             MAIR_EL1_NORMAL_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
     114            MAIR_EL1_DEVICE_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
    135115            PTE_L012_TYPE_BLOCK << PTE_TYPE_SHIFT | \
    136116            1 << PTE_PRESENT_SHIFT)
     
    138118        orr x3, x3, x4, lsl #PTE_OUTPUT_ADDRESS_SHIFT
    139119        str x3, [x2]
    140 
    141         /* 2nd GiB */
    142         add x23, x20, x22
    143         add x24, x21, x22
    144 
    145         adrp x2, upper_page_table_level1
    146         lsr x3, x24, #PTL1_VA_SHIFT
    147         and x3, x3, #PTL1_VA_MASK
    148         add x2, x2, x3, lsl #PTL_ENTRY_SIZE_SHIFT
    149         mov x3, #( \
    150             1 << PTE_ACCESS_SHIFT | \
    151             MAIR_EL1_NORMAL_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
    152             PTE_L012_TYPE_BLOCK << PTE_TYPE_SHIFT | \
    153             1 << PTE_PRESENT_SHIFT)
    154         lsr x4, x23, #FRAME_WIDTH
    155         orr x3, x3, x4, lsl #PTE_OUTPUT_ADDRESS_SHIFT
    156         str x3, [x2]
    157 
    158         /* 3rd GiB */
    159         add x23, x23, x22
    160         add x24, x24, x22
    161 
    162         adrp x2, upper_page_table_level1
    163         lsr x3, x24, #PTL1_VA_SHIFT
    164         and x3, x3, #PTL1_VA_MASK
    165         add x2, x2, x3, lsl #PTL_ENTRY_SIZE_SHIFT
    166         mov x3, #( \
    167             1 << PTE_ACCESS_SHIFT | \
    168             MAIR_EL1_NORMAL_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
    169             PTE_L012_TYPE_BLOCK << PTE_TYPE_SHIFT | \
    170             1 << PTE_PRESENT_SHIFT)
    171         lsr x4, x23, #FRAME_WIDTH
    172         orr x3, x3, x4, lsl #PTE_OUTPUT_ADDRESS_SHIFT
    173         str x3, [x2]
    174 
    175         /* 4th GiB */
    176         add x23, x23, x22
    177         add x24, x24, x22
    178 
    179         adrp x2, upper_page_table_level1
    180         lsr x3, x24, #PTL1_VA_SHIFT
    181         and x3, x3, #PTL1_VA_MASK
    182         add x2, x2, x3, lsl #PTL_ENTRY_SIZE_SHIFT
    183         mov x3, #( \
    184             1 << PTE_ACCESS_SHIFT | \
    185             MAIR_EL1_DEVICE_MEMORY_INDEX << PTE_ATTR_INDEX_SHIFT | \
    186             PTE_L012_TYPE_BLOCK << PTE_TYPE_SHIFT | \
    187             1 << PTE_PRESENT_SHIFT)
    188         lsr x4, x23, #FRAME_WIDTH
    189         orr x3, x3, x4, lsl #PTE_OUTPUT_ADDRESS_SHIFT
    190         str x3, [x2]
    191 
    192         /* Flush the data cache of page tables. */
    193         adrp x27, lower_page_table_level0
    194         mov x28, #4096
    195         dcache_flush x27 x28 x29 x30
    196 
    197         adrp x27, lower_page_table_level1
    198         mov x28, #4096
    199         dcache_flush x27 x28 x29 x30
    200 
    201         adrp x27, upper_page_table_level0
    202         mov x28, #4096
    203         dcache_flush x27 x28 x29 x30
    204 
    205         adrp x27, upper_page_table_level1
    206         mov x28, #4096
    207         dcache_flush x27 x28 x29 x30
    208120
    209121        /* Make sure there are not any stale TLB entries. */
     
    359271lower_page_table_level0:
    360272        .space 4096
    361 
    362273lower_page_table_level1:
    363274        .space 4096
    364 
    365275upper_page_table_level0:
    366276        .space 4096
    367 
    368277upper_page_table_level1:
    369278        .space 4096
Note: See TracChangeset for help on using the changeset viewer.