ArmV8 support arch mmu intr clock
This commit is contained in:
@@ -41,13 +41,13 @@ static struct MmuDriverRightGroup right_group;
|
||||
void load_pgdir(uintptr_t pgdir_paddr)
|
||||
{
|
||||
/* get cache driver */
|
||||
struct ICacheDone* p_icache_done = AchieveResource(&right_group.icache_driver_tag);
|
||||
struct DCacheDone* p_dcache_done = AchieveResource(&right_group.dcache_driver_tag);
|
||||
// struct ICacheDone* p_icache_done = AchieveResource(&right_group.icache_driver_tag);
|
||||
// struct DCacheDone* p_dcache_done = AchieveResource(&right_group.dcache_driver_tag);
|
||||
|
||||
TTBR0_W((uint64_t)pgdir_paddr);
|
||||
CLEARTLB(0);
|
||||
p_icache_done->invalidateall();
|
||||
p_dcache_done->flushall();
|
||||
// p_icache_done->invalidateall();
|
||||
// p_dcache_done->flushall();
|
||||
}
|
||||
|
||||
__attribute__((always_inline)) inline static void _tlb_flush(uintptr_t va)
|
||||
|
||||
@@ -29,77 +29,48 @@ Modification:
|
||||
#include "mmu.h"
|
||||
#include "mmu_common.h"
|
||||
|
||||
// void GetUsrPteAttr(uintptr_t* attr)
|
||||
// {
|
||||
// static char init = 0;
|
||||
// static PageTblEntry usr_pte_attr;
|
||||
// if (init == 0) {
|
||||
// init = 1;
|
||||
// clang-format off
|
||||
#define ARMV8_PTE_ATTR_MASK(attr) (((attr) & 0b111) << 2)
|
||||
#define ARMV8_PTE_DEVICE ARMV8_PTE_ATTR_MASK(0x0)
|
||||
#define ARMV8_PTE_NORMAL ARMV8_PTE_ATTR_MASK(0x1)
|
||||
|
||||
// usr_pte_attr.entry = 0;
|
||||
// usr_pte_attr.desc_type = PAGE_4K;
|
||||
// usr_pte_attr.B = 1;
|
||||
// usr_pte_attr.C = 1;
|
||||
// usr_pte_attr.S = 1;
|
||||
// usr_pte_attr.AP1_0 = AccessPermission_KernelUser;
|
||||
// }
|
||||
// *attr = usr_pte_attr.entry;
|
||||
// }
|
||||
#define ARMV8_PTE_AP(ap) (((ap) & 0b11) << 6)
|
||||
#define ARMV8_PTE_AP_U ARMV8_PTE_AP(0x01)
|
||||
#define ARMV8_PTE_AP_K ARMV8_PTE_AP(0x00)
|
||||
#define ARMV8_PTE_AP_RO ARMV8_PTE_AP(0b10)
|
||||
#define ARMV8_PTE_AP_RW ARMV8_PTE_AP(0b00)
|
||||
|
||||
#define ARMV8_PTE_AF (0x1 << 10)
|
||||
#define ARMV8_PTE_PXN (1ULL << 53) // Privileged eXecute Never
|
||||
#define ARMV8_PTE_UXN (1ULL << 54) // Unprivileged(user) eXecute Never
|
||||
#define ARMV8_PTE_XN (ARMV8_PTE_PXN | ARMV8_PTE_UXN)
|
||||
|
||||
#define ARMV8_PTE_VALID (0b11 << 0)
|
||||
#define ARMV8_PDE_VALID (0b11 << 0)
|
||||
|
||||
// clang-format on
|
||||
|
||||
void GetUsrPteAttr(uintptr_t* attr)
|
||||
{
|
||||
static char init = 0;
|
||||
if (init == 0) {
|
||||
init = 1;
|
||||
}
|
||||
*attr = ARMV8_PTE_AP_U | ARMV8_PTE_AP_RW | ARMV8_PTE_AF | ARMV8_PTE_NORMAL | ARMV8_PTE_VALID;
|
||||
}
|
||||
|
||||
void GetUsrDevPteAttr(uintptr_t* attr)
|
||||
{
|
||||
// static char init = 0;
|
||||
// static PageTblEntry usr_pte_attr;
|
||||
// if (init == 0) {
|
||||
// init = 1;
|
||||
|
||||
// usr_pte_attr.entry = 0;
|
||||
// usr_pte_attr.desc_type = PAGE_4K;
|
||||
// usr_pte_attr.AP1_0 = AccessPermission_KernelUser;
|
||||
// }
|
||||
// *attr = usr_pte_attr.entry;
|
||||
*attr = ARMV8_PTE_AP_U | ARMV8_PTE_AP_RW | ARMV8_PTE_AF | ARMV8_PTE_DEVICE | ARMV8_PTE_XN | ARMV8_PTE_VALID;
|
||||
}
|
||||
|
||||
void GetDevPteAttr(uintptr_t* attr)
|
||||
{
|
||||
// static char init = 0;
|
||||
// static PageTblEntry dev_pte_attr;
|
||||
// if (init == 0) {
|
||||
// init = 1;
|
||||
|
||||
// dev_pte_attr.entry = 0;
|
||||
// dev_pte_attr.desc_type = PAGE_4K;
|
||||
// dev_pte_attr.AP1_0 = AccessPermission_KernelOnly;
|
||||
// }
|
||||
// *attr = dev_pte_attr.entry;
|
||||
*attr = ARMV8_PTE_AP_K | ARMV8_PTE_AP_RW | ARMV8_PTE_AF | ARMV8_PTE_DEVICE | ARMV8_PTE_XN | ARMV8_PTE_VALID;
|
||||
}
|
||||
|
||||
void GetKernPteAttr(uintptr_t* attr)
|
||||
{
|
||||
// static char init = 0;
|
||||
// static PageTblEntry kern_pte_attr;
|
||||
// if (init == 0) {
|
||||
// init = 1;
|
||||
|
||||
// kern_pte_attr.entry = 0;
|
||||
// kern_pte_attr.desc_type = PAGE_4K;
|
||||
// kern_pte_attr.B = 1;
|
||||
// kern_pte_attr.C = 1;
|
||||
// kern_pte_attr.S = 1;
|
||||
// kern_pte_attr.AP1_0 = AccessPermission_KernelOnly;
|
||||
// }
|
||||
// *attr = kern_pte_attr.entry;
|
||||
*attr = ARMV8_PTE_AP_K | ARMV8_PTE_AP_RW | ARMV8_PTE_AF | ARMV8_PTE_NORMAL | ARMV8_PTE_VALID;
|
||||
}
|
||||
|
||||
void GetPdeAttr(uintptr_t* attr)
|
||||
{
|
||||
// *attr = PAGE_DIR_COARSE;
|
||||
*attr = ARMV8_PDE_VALID;
|
||||
}
|
||||
Reference in New Issue
Block a user