qemu-arm
[Top][All Lists]
Advanced

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

Re: [PATCH v2 2/3] linux-user: Emulate /proc/cpuinfo on aarch64 and arm


From: Richard Henderson
Subject: Re: [PATCH v2 2/3] linux-user: Emulate /proc/cpuinfo on aarch64 and arm
Date: Wed, 2 Aug 2023 11:15:14 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0

On 8/1/23 16:08, Helge Deller wrote:
+#if defined(TARGET_AARCH64) || defined(TARGET_ARM)
+static int open_cpuinfo(CPUArchState *cpu_env, int fd)
+{
+    const int is64 = TARGET_ABI_BITS == 64;
+    ARMCPU *cpu = ARM_CPU(thread_cpu);
+    uint64_t midr = cpu->midr;
+    const int rev  = (midr & 0xf);
+    const int arch = is64 ? 8 : 7;

The 32-bit arch is not automatically v7: -cpu max is v8 and -cpu ti925t is v4.

You need an if ladder for this:

    if (arm_feature(&cpu->env, ARM_FEATURE_V8)) {
        arch = 8;
    } else if (arm_feature(&cpu->env, ARM_FEATURE_V7)) {
        arch = 7;
    } else if (arm_feature(&cpu->env, ARM_FEATURE_V6)) {
        arch = 6;
    } else if (arm_feature(&cpu->env, ARM_FEATURE_V5)) {
        arch = 5;
    } else {
        arch = 4;
    }

Also,

    ref = FIELD_EX64(cpu->midr, MIDR_EL1, REVISION);

etc, instead of masking by hand.

+        dprintf(fd, "model name\t: ARMv%d Processor rev %d (%s%c)\n",
+            arch, rev, is64 ? "v8" : "armv7",

Will need adjustment.

+#if TARGET_BIG_ENDIAN
+            'b'
+#else
+            'l'
+#endif

Don't need an ifdef: (TARGET_BIG_ENDIAN ? 'b' : 'l').

+        dprintf(fd, "CPU implementer\t: %#02x\n", (int)(midr >> 24) & 0xff);
+        dprintf(fd, "CPU architecture: %d\n",     arch);
+        dprintf(fd, "CPU variant\t: %#x\n",       (int)(midr >> 20) & 0xf );
+        dprintf(fd, "CPU part\t: %#03x\n",        (int)(midr >> 4) & 0xfff);
+        dprintf(fd, "CPU revision\t: %d\n\n",     rev);
+    }

FIELD_EX64(midr, MIDR_EL1, ...)

Though I have some memory of these fields changing across arch versions.
You might need to extract them earlier, within the if ladder.


r~



reply via email to

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