]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
target/mips: Revert TARGET_PAGE_BITS_VARY
authorRichard Henderson <richard.henderson@linaro.org>
Fri, 28 Mar 2025 17:55:24 +0000 (12:55 -0500)
committerMichael Tokarev <mjt@tls.msk.ru>
Sat, 5 Apr 2025 13:51:46 +0000 (16:51 +0300)
Revert ee3863b9d41 and a08d60bc6c2b.  The logic behind changing
the system page size because of what the Loongson kernel "prefers"
is flawed.

In the Loongson-2E manual, section 5.5, it is clear that the cpu
supports a 4k page size (along with many others).  Similarly for
the Loongson-3 series CPUs, the 4k page size is mentioned in the
section 7.7 (PageMask Register).  Therefore we must continue to
support a 4k page size.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20250328175526.368121-2-richard.henderson@linaro.org>
[PMD: Mention Loongson-3 series CPUs]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
(cherry picked from commit fca2817fdcb00e65020c2dcfcb0b23b2a20ea3c4)
(Mjt: context fixes for 7.2.x)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
hw/mips/fuloong2e.c
hw/mips/loongson3_virt.c
target/mips/cpu-param.h
target/mips/tcg/sysemu/cp0_helper.c
target/mips/tcg/sysemu/tlb_helper.c

index 34befa5dd532f140c525e8ef3e8790cab78df4d1..dbd26df00b9b0efc1b3cda033d26e34bc143a479 100644 (file)
@@ -336,7 +336,6 @@ static void mips_fuloong2e_machine_init(MachineClass *mc)
     mc->default_cpu_type = MIPS_CPU_TYPE_NAME("Loongson-2E");
     mc->default_ram_size = 256 * MiB;
     mc->default_ram_id = "fuloong2e.ram";
-    mc->minimum_page_bits = 14;
 }
 
 DEFINE_MACHINE("fuloong2e", mips_fuloong2e_machine_init)
index b4f6bff1b8d0068688a2c9b0bffb61a910b89df8..dc94e21438819594c9f6a8b2a3d1166d1ab0a49e 100644 (file)
@@ -616,7 +616,6 @@ static void loongson3v_machine_class_init(ObjectClass *oc, void *data)
     mc->max_cpus = LOONGSON_MAX_VCPUS;
     mc->default_ram_id = "loongson3.highram";
     mc->default_ram_size = 1600 * MiB;
-    mc->minimum_page_bits = 14;
 }
 
 static const TypeInfo loongson3_machine_types[] = {
index f4c76994ea4be0ae1643c4db1f5273f8f6423650..4d9f4297f1551467728e7259a7e16cbcc3c1dc86 100644 (file)
 #  define TARGET_VIRT_ADDR_SPACE_BITS 32
 #endif
 #endif
-#ifdef CONFIG_USER_ONLY
 #define TARGET_PAGE_BITS 12
-#else
-#define TARGET_PAGE_BITS_VARY
-#define TARGET_PAGE_BITS_MIN 12
-#endif
 #define NB_MMU_MODES 4
 
 #endif
index 5da11245892873cf454823e9a2075b676b6ce726..f0459a85e6fa1e86e836d2242e35b1411be1470d 100644 (file)
@@ -900,18 +900,13 @@ void update_pagemask(CPUMIPSState *env, target_ulong arg1, int32_t *pagemask)
     if ((mask >> maskbits) != 0) {
         goto invalid;
     }
-    /* We don't support VTLB entry smaller than target page */
-    if ((maskbits + TARGET_PAGE_BITS_MIN) < TARGET_PAGE_BITS) {
-        goto invalid;
-    }
     env->CP0_PageMask = mask << CP0PM_MASK;
 
     return;
 
 invalid:
     /* When invalid, set to default target page size. */
-    mask = (~TARGET_PAGE_MASK >> TARGET_PAGE_BITS_MIN);
-    env->CP0_PageMask = mask << CP0PM_MASK;
+    env->CP0_PageMask = 0;
 }
 
 void helper_mtc0_pagemask(CPUMIPSState *env, target_ulong arg1)
index 9d16859c0a625be7ee73a1e63fd63e3548d3bab6..f0a513365bae2dd7528212e1b890ea419dfbeb45 100644 (file)
@@ -877,7 +877,7 @@ refill:
             break;
         }
     }
-    pw_pagemask = m >> TARGET_PAGE_BITS_MIN;
+    pw_pagemask = m >> TARGET_PAGE_BITS;
     update_pagemask(env, pw_pagemask << CP0PM_MASK, &pw_pagemask);
     pw_entryhi = (address & ~0x1fff) | (env->CP0_EntryHi & 0xFF);
     {