Hi:
Why rtems arm bsp do not set xn flag when config mmu device region?
#define AARCH64_MMU_FLAGS_BASE \( MMU_DESC_VALID | MMU_DESC_SH_INNER | MMU_DESC_AF )#define AARCH64_MMU_DATA_RO_CACHED \( AARCH64_MMU_FLAGS_BASE | MMU_DESC_MAIR_ATTR( 3 ) | MMU_DESC_WRITE_DISABLE )#define AARCH64_MMU_CODE_CACHED AARCH64_MMU_DATA_RO_CACHED#define AARCH64_MMU_CODE_RW_CACHED AARCH64_MMU_DATA_RW_CACHED#define AARCH64_MMU_DATA_RO \( AARCH64_MMU_FLAGS_BASE | MMU_DESC_MAIR_ATTR( 1 ) | MMU_DESC_WRITE_DISABLE )#define AARCH64_MMU_CODE AARCH64_MMU_DATA_RO#define AARCH64_MMU_CODE_RW AARCH64_MMU_DATA_RW/* RW implied by not ORing in RO */#define AARCH64_MMU_DATA_RW_CACHED \( AARCH64_MMU_FLAGS_BASE | MMU_DESC_MAIR_ATTR( 3 ) )#define AARCH64_MMU_DATA_RW \( AARCH64_MMU_FLAGS_BASE | MMU_DESC_MAIR_ATTR( 1 ) )#define AARCH64_MMU_DEVICE ( AARCH64_MMU_FLAGS_BASE | MMU_DESC_MAIR_ATTR( 0 ) )
ARM datasheet(ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition):
Any region of memory that is read-sensitive must be marked as Execute Never,to avoid the possibility of a speculative prefetch accessing the memory region.For example, any memory region that corresponds to a read-sensitive peripheralmust be marked as Execute Never.and linux mmu config:#define PROT_DEVICE_nGnRnE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRnE))#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_DEVICE_nGnRE))#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_NC))#define PROT_NORMAL_WT (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL_WT))#define PROT_NORMAL (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL))#define PROT_SECT_DEVICE_nGnRE (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_DEVICE_nGnRE))#define PROT_SECT_NORMAL (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))#define PROT_SECT_NORMAL_EXEC (PROT_SECT_DEFAULT | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))#define _PAGE_DEFAULT (_PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))#define _HYP_PAGE_DEFAULT _PAGE_DEFAULT#define PAGE_KERNEL __pgprot(PROT_NORMAL)#define PAGE_KERNEL_RO __pgprot((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY)#define PAGE_KERNEL_ROX __pgprot((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY)#define PAGE_KERNEL_EXEC __pgprot(PROT_NORMAL & ~PTE_PXN)#define PAGE_KERNEL_EXEC_CONT __pgprot((PROT_NORMAL & ~PTE_PXN) | PTE_CONT)Thanks!
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users