diff --git a/libcpu/risc-v/common64/asid.c b/libcpu/risc-v/common64/asid.c index 5d7bffa3dc..c8ed61eb67 100644 --- a/libcpu/risc-v/common64/asid.c +++ b/libcpu/risc-v/common64/asid.c @@ -29,9 +29,10 @@ static rt_uint64_t global_asid_generation; void rt_hw_asid_init(void) { - unsigned int satp_reg = read_csr(satp); + rt_uint64_t satp_reg = read_csr(satp); satp_reg |= (((rt_uint64_t)0xffff) << PPN_BITS); write_csr(satp, satp_reg); + __asm__ volatile("sfence.vma x0, x0"); unsigned short valid_asid_bit = ((read_csr(satp) >> PPN_BITS) & 0xffff); // The maximal value of ASIDLEN, is 9 for Sv32 or 16 for Sv39, Sv48, and Sv57