#------------------------------------------------------------------------------ # # TLB refill exception handler # # Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # #----------------------------------------------------------------------------- #include ASM_GLOBAL ASM_PFX(HandleTlbRefillStart) ASM_GLOBAL ASM_PFX(HandleTlbRefillEnd) # # Refill the page table. # @param VOID # @retval VOID # ASM_PFX(HandleTlbRefillStart): csrwr $t0, LOONGARCH_CSR_TLBRSAVE csrrd $t0, LOONGARCH_CSR_PWCTL1 srli.d $t0, $t0, 18 andi $t0, $t0, 0x3F bnez $t0, Level5 csrrd $t0, LOONGARCH_CSR_PWCTL1 srli.d $t0, $t0, 6 andi $t0, $t0, 0x3F bnez $t0, Level4 csrrd $t0, LOONGARCH_CSR_PGD b Level3 Level5: csrrd $t0, LOONGARCH_CSR_PGD lddir $t0, $t0, 4 #Put pud BaseAddress into T0 lddir $t0, $t0, 3 #Put pud BaseAddress into T0 b Level3 Level4: csrrd $t0, LOONGARCH_CSR_PGD lddir $t0, $t0, 3 #Put pud BaseAddress into T0 Level3: lddir $t0, $t0, 2 #Put pmd BaseAddress into T0 lddir $t0, $t0, 1 #Put pte BaseAddress into T0 ldpte $t0, 0 ldpte $t0, 1 tlbfill // refill hi, lo0, lo1 csrrd $t0, LOONGARCH_CSR_TLBRSAVE ertn ASM_PFX(HandleTlbRefillEnd): .end