linux-mips
[Top] [All Lists]

Re: [Fwd: [bug report] 0xffffffffc0000000 can't be used on bcm1250]

To: "Maciej W. Rozycki" <macro@linux-mips.org>
Subject: Re: [Fwd: [bug report] 0xffffffffc0000000 can't be used on bcm1250]
From: Ralf Baechle <ralf@linux-mips.org>
Date: Mon, 13 Oct 2008 17:29:06 +0100
Cc: weiwei wang <veivei.vang@gmail.com>, mason@broadcom.com, linux-mips@linux-mips.org
In-reply-to: <alpine.LFD.1.10.0810131508390.9667@ftp.linux-mips.org>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <48EC9894.4080201@gmail.com> <20081008115001.GA21596@linux-mips.org> <48ED5BA5.4070301@gmail.com> <20081009131554.GB22796@linux-mips.org> <48EEBFE8.1000501@gmail.com> <alpine.LFD.1.10.0810101138180.19747@ftp.linux-mips.org> <48F2BC15.70408@gmail.com> <alpine.LFD.1.10.0810131508390.9667@ftp.linux-mips.org>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.5.18 (2008-05-17)
On Mon, Oct 13, 2008 at 04:18:04PM +0100, Maciej W. Rozycki wrote:

>  /*
> + * To avoid the BCM1250 M3 erratum check whether EntryHi is consistent
> + * with BadVAddr and return for the exception to retrigger if not.
> + */
> +static void __cpuinit build_bcm1250_m3_war(u32 **p, struct uasm_reloc **r)
> +{
> +     uasm_i_dmfc0(p, K0, C0_BADVADDR);
> +     uasm_i_dmfc0(p, K1, C0_ENTRYHI);
> +     uasm_i_xor(p, K0, K0, K1);
> +     uasm_i_dsll(p, K1, K0, 24);
> +     uasm_i_dsrl32(p, K1, K1, (24 + PAGE_SHIFT + 1) - 32);
> +     uasm_i_dsrl32(p, K0, K0, 30);
> +     uasm_i_or(p, K0, K0, K1);
> +     uasm_il_bnez(p, r, K0, label_leave);

The workaround is beginning to be relativly expensive.  We're investing 8
instructions extra only to verify that the content of c0_entryhi is
correct.  I haven't tried yet but me seems by avoiding the use of c0_context
entirely relying only on badvaddr we may be able to get away cheaper.

Btw, adding linux-mips to the cc list.  This really should be public.

  Ralf

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