CSR_HGATP
csr_write(CSR_HGATP, HGATP_MODE_SV57X4 << HGATP_MODE_SHIFT);
if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV57X4) {
csr_write(CSR_HGATP, HGATP_MODE_SV48X4 << HGATP_MODE_SHIFT);
if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV48X4) {
csr_write(CSR_HGATP, HGATP_MODE_SV39X4 << HGATP_MODE_SHIFT);
if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV39X4) {
csr_write(CSR_HGATP, HGATP_MODE_SV32X4 << HGATP_MODE_SHIFT);
if ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV32X4) {
csr_write(CSR_HGATP, 0);
ncsr_write(CSR_HGATP, hgatp);
csr_write(CSR_HGATP, hgatp);
hgatp = csr_swap(CSR_HGATP, vmid << HGATP_VMID_SHIFT);
csr_write(CSR_HGATP, hgatp);
hgatp = csr_swap(CSR_HGATP, vmid << HGATP_VMID_SHIFT);
csr_write(CSR_HGATP, hgatp);
hgatp = csr_swap(CSR_HGATP, vmid << HGATP_VMID_SHIFT);
csr_write(CSR_HGATP, hgatp);
hgatp = csr_swap(CSR_HGATP, vmid << HGATP_VMID_SHIFT);
csr_write(CSR_HGATP, (kvm_riscv_gstage_mode << HGATP_MODE_SHIFT) | HGATP_VMID);
vmid_bits = csr_read(CSR_HGATP);
csr_write(CSR_HGATP, 0);