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: "Maciej W. Rozycki" <macro@linux-mips.org>
Date: Mon, 1 Feb 2010 22:39:03 +0000 (GMT)
Cc: David Daney <ddaney@caviumnetworks.com>, "linux-mips@linux-mips.org" <linux-mips@linux-mips.org>
In-reply-to: <1265061872.5825.71.camel@groeck-laptop>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1265058019-21484-1-git-send-email-guenter.roeck@ericsson.com> <4B674ADD.1050306@caviumnetworks.com> <1265061872.5825.71.camel@groeck-laptop>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Alpine 2.00 (LFD 1167 2008-08-23)
On Mon, 1 Feb 2010, Guenter Roeck wrote:

> On Mon, 2010-02-01 at 16:42 -0500, David Daney wrote:
> > 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 
> 
> Sure, no problem.

 Especially as:

1. DCLZ is not a valid MIPS III instruction; some 64-bit CPUs will fault 
   on it.

2. You have to take care of CP0 hazards, e.g. with the R4000 if an MTC0 is 
   immediately followed by an MFC0 accessing the same CP0 register, then 
   the result of the latter instruction is unpredictable.

  Maciej

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