Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/mm/tlb.c

    rbb75646 r9d58539  
    3737#include <arch/mm/asid.h>
    3838#include <arch/asm.h>
    39 #include <arch/cp15.h>
    4039#include <typedefs.h>
    4140#include <arch/mm/page.h>
    42 #include <arch/cache.h>
    4341
    4442/** Invalidate all entries in TLB.
     
    4846void tlb_invalidate_all(void)
    4947{
    50         TLBIALL_write(0);
    51         /*
    52          * "A TLB maintenance operation is only guaranteed to be complete after
    53          * the execution of a DSB instruction."
    54          * "An ISB instruction, or a return from an exception, causes the
    55          * effect of all completed TLB maintenance operations that appear in
    56          * program order before the ISB or return from exception to be visible
    57          * to all subsequent instructions, including the instruction fetches
    58          * for those instructions."
    59          * ARM Architecture reference Manual ch. B3.10.1 p. B3-1374 B3-1375
    60          */
    61         read_barrier();
    62         inst_barrier();
     48        asm volatile (
     49                "eor r1, r1\n"
     50                "mcr p15, 0, r1, c8, c7, 0\n"
     51                ::: "r1"
     52        );
    6353}
    6454
     
    7060{
    7161        tlb_invalidate_all();
    72         // TODO: why not TLBIASID_write(asid) ?
    7362}
    7463
     
    7665 *
    7766 * @param page Virtual adress of the page
    78  */
     67 */ 
    7968static inline void invalidate_page(uintptr_t page)
    8069{
    81         //TODO: What about TLBIMVAA?
    82         TLBIMVA_write(page);
    83         /*
    84          * "A TLB maintenance operation is only guaranteed to be complete after
    85          * the execution of a DSB instruction."
    86          * "An ISB instruction, or a return from an exception, causes the
    87          * effect of all completed TLB maintenance operations that appear in
    88          * program order before the ISB or return from exception to be visible
    89          * to all subsequent instructions, including the instruction fetches
    90          * for those instructions."
    91          * ARM Architecture reference Manual ch. B3.10.1 p. B3-1374 B3-1375
    92          */
    93         read_barrier();
    94         inst_barrier();
     70        asm volatile (
     71                "mcr p15, 0, %[page], c8, c7, 1\n"
     72                :: [page] "r" (page)
     73        );
    9574}
    9675
     
    10483void tlb_invalidate_pages(asid_t asid __attribute__((unused)), uintptr_t page, size_t cnt)
    10584{
    106         for (unsigned i = 0; i < cnt; i++)
     85        unsigned int i;
     86
     87        for (i = 0; i < cnt; i++)
    10788                invalidate_page(page + i * PAGE_SIZE);
    10889}
Note: See TracChangeset for help on using the changeset viewer.