linux-mips
[Top] [All Lists]

Re: [PATCH v2] Virtual memory size detection for 64 bit MIPS CPUs

To: Guenter Roeck <guenter.roeck@ericsson.com>
Subject: Re: [PATCH v2] Virtual memory size detection for 64 bit MIPS CPUs
From: David Daney <ddaney@caviumnetworks.com>
Date: Mon, 01 Feb 2010 13:42:53 -0800
Cc: linux-mips@linux-mips.org
In-reply-to: <1265058019-21484-1-git-send-email-guenter.roeck@ericsson.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1265058019-21484-1-git-send-email-guenter.roeck@ericsson.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Thunderbird 2.0.0.21 (X11/20090320)
Guenter Roeck wrote:
[...]
+static inline void cpu_set_vmbits(struct cpuinfo_mips *c)
+{
+       if (cpu_has_64bits) {
+               unsigned long zbits;
+
+               asm volatile(".set mips64\n"
+                            "and %0, 0\n"
+                            "dsubu %0, 1\n"
+                            "dmtc0 %0, $10, 0\n"
+                            "dmfc0 %0, $10, 0\n"
+                            "dsll %0, %0, 2\n"
+                            "dsra %0, %0, 2\n"
+                            "dclz %0, %0\n"
+                            ".set mips0\n"
+                            : "=r" (zbits));
+               c->vmbits = 64 - zbits;
+       } else
+               c->vmbits = 32;
+}
+

It should be possible to express this in 'pure' C using read_c0_entryhi()/write_c0_entryhi(), also you need to be sure you are not writing 1s to any reserved bits of the register.


David Daney

<Prev in Thread] Current Thread [Next in Thread>