qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] target/loongarch: Support 4K page size


From: maobibo
Subject: Re: [PATCH] target/loongarch: Support 4K page size
Date: Mon, 23 Oct 2023 12:06:07 +0800
User-agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0



在 2023/10/23 上午10:40, Song Gao 写道:
The LoongArch kernel supports 4K page size.
Change TARGET_PAGE_BITS to 12.

Signed-off-by: Song Gao <gaosong@loongson.cn>
---
  target/loongarch/cpu-param.h  | 2 +-
  target/loongarch/tlb_helper.c | 9 ++++-----
  2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/target/loongarch/cpu-param.h b/target/loongarch/cpu-param.h
index 1265dc7cb5..cfe195db4e 100644
--- a/target/loongarch/cpu-param.h
+++ b/target/loongarch/cpu-param.h
@@ -12,6 +12,6 @@
  #define TARGET_PHYS_ADDR_SPACE_BITS 48
  #define TARGET_VIRT_ADDR_SPACE_BITS 48
-#define TARGET_PAGE_BITS 14
+#define TARGET_PAGE_BITS 12
Hi Gaosong,

The popular OS about LoongArch still uses 16K page size, qemu should follow the rule of OS rather than defining 4K page size alone.

Regards
Bibo Mao

#endif
diff --git a/target/loongarch/tlb_helper.c b/target/loongarch/tlb_helper.c
index c8b8b0497f..449043c68b 100644
--- a/target/loongarch/tlb_helper.c
+++ b/target/loongarch/tlb_helper.c
@@ -60,6 +60,9 @@ static int loongarch_map_tlb_entry(CPULoongArchState *env, 
hwaddr *physical,
          tlb_rplv = 0;
      }
+ /* Remove sw bit between bit12 -- bit PS*/
+    tlb_ppn = tlb_ppn & ~(((0x1UL << (tlb_ps - 12)) -1));
+
      /* Check access rights */
      if (!tlb_v) {
          return TLBRET_INVALID;
@@ -82,10 +85,6 @@ static int loongarch_map_tlb_entry(CPULoongArchState *env, 
hwaddr *physical,
          return TLBRET_DIRTY;
      }
- /*
-     * tlb_entry contains ppn[47:12] while 16KiB ppn is [47:15]
-     * need adjust.
-     */
      *physical = (tlb_ppn << R_TLBENTRY_64_PPN_SHIFT) |
                  (address & MAKE_64BIT_MASK(0, tlb_ps));
      *prot = PAGE_READ;
@@ -774,7 +773,7 @@ void helper_ldpte(CPULoongArchState *env, target_ulong 
base, target_ulong odd,
          /* Move Global bit */
          tmp0 = ((tmp0 & (1 << LOONGARCH_HGLOBAL_SHIFT))  >>
                  LOONGARCH_HGLOBAL_SHIFT) << R_TLBENTRY_G_SHIFT |
-                (tmp0 & (~(1 << R_TLBENTRY_G_SHIFT)));
+                (tmp0 & (~(1 << LOONGARCH_HGLOBAL_SHIFT)));
          ps = ptbase + ptwidth - 1;
          if (odd) {
              tmp0 += MAKE_64BIT_MASK(ps, 1);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]