Changeset 5f310ec8 in mainline


Ignore:
Timestamp:
2015-09-16T18:52:13Z (9 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a1d636e
Parents:
996dc042
Message:

Access CP15 register 8 wrt. target architecture and implementation

CP15 register 8 controls the TLB(s).

  • Do not define macros for functionality which is not supported by the target architecture or implementation.
  • For ARM920T implementation, do not use TLBIMVA in invalidate_page().
Location:
kernel/arch/arm32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/include/arch/cp15.h

    r996dc042 r5f310ec8  
    415415
    416416/* TLB maintenance */
     417#if defined(PROCESSOR_ARCH_armv7_a)
    417418CONTROL_REG_GEN_WRITE(TLBIALLIS, c8, 0, c3, 0); /* Inner shareable */
    418419CONTROL_REG_GEN_WRITE(TLBIMVAIS, c8, 0, c3, 1); /* Inner shareable */
    419420CONTROL_REG_GEN_WRITE(TLBIASIDIS, c8, 0, c3, 2); /* Inner shareable */
    420421CONTROL_REG_GEN_WRITE(TLBIMVAAIS, c8, 0, c3, 3); /* Inner shareable */
     422#endif
    421423
    422424CONTROL_REG_GEN_WRITE(ITLBIALL, c8, 0, c5, 0);
    423425CONTROL_REG_GEN_WRITE(ITLBIMVA, c8, 0, c5, 1);
     426#if defined(PROCESSOR_ARCH_armv6) || defined(PROCESSOR_ARCH_armv7_a)
    424427CONTROL_REG_GEN_WRITE(ITLBIASID, c8, 0, c5, 2);
     428#endif
    425429
    426430CONTROL_REG_GEN_WRITE(DTLBIALL, c8, 0, c6, 0);
    427431CONTROL_REG_GEN_WRITE(DTLBIMVA, c8, 0, c6, 1);
     432#if defined(PROCESSOR_ARCH_armv6) || defined(PROCESSOR_ARCH_armv7_a)
    428433CONTROL_REG_GEN_WRITE(DTLBIASID, c8, 0, c6, 2);
     434#endif
    429435
    430436CONTROL_REG_GEN_WRITE(TLBIALL, c8, 0, c7, 0);
     437#if !defined(PROCESSOR_arm920t)
    431438CONTROL_REG_GEN_WRITE(TLBIMVA, c8, 0, c7, 1);
     439#endif
     440#if defined(PROCESSOR_ARCH_armv6) || defined(PROCESSOR_ARCH_armv7_a)
    432441CONTROL_REG_GEN_WRITE(TLBIASID, c8, 0, c7, 2);
     442#endif
     443#if defined(PROCESSOR_ARCH_armv7_a)
    433444CONTROL_REG_GEN_WRITE(TLBIMVAA, c8, 0, c7, 3);
    434 
     445#endif
     446
     447#if defined(PROCESSOR_ARCH_armv7_a)
    435448CONTROL_REG_GEN_WRITE(TLBIALLHIS, c8, 4, c3, 0); /* Inner shareable */
    436449CONTROL_REG_GEN_WRITE(TLBIMVAHIS, c8, 4, c3, 1); /* Inner shareable */
    437450CONTROL_REG_GEN_WRITE(TLBIALLNSNHIS, c8, 4, c3, 4); /* Inner shareable */
    438 
     451#endif
     452
     453#if defined(PROCESSOR_ARCH_armv7_a)
    439454CONTROL_REG_GEN_WRITE(TLBIALLH, c8, 4, c7, 0);
    440455CONTROL_REG_GEN_WRITE(TLBIMVAH, c8, 4, c7, 1);
    441456CONTROL_REG_GEN_WRITE(TLBIALLNSNHS, c8, 4, c7, 4);
     457#endif
    442458
    443459/* c9 are performance monitoring resgisters */
  • kernel/arch/arm32/src/mm/tlb.c

    r996dc042 r5f310ec8  
    7979static inline void invalidate_page(uintptr_t page)
    8080{
     81#if defined(PROCESSOR_arm920t)
     82        ITLBIMVA_write(page);
     83        DTLBIMVA_write(page);
     84#else
    8185        //TODO: What about TLBIMVAA?
    8286        TLBIMVA_write(page);
     87#endif
    8388        /*
    8489         * "A TLB maintenance operation is only guaranteed to be complete after
Note: See TracChangeset for help on using the changeset viewer.