[Top] [All Lists]

Re: [PATCH 35/37] Set c0 status for ST0_KX on Cavium OCTEON.

To: Chad Reese <>
Subject: Re: [PATCH 35/37] Set c0 status for ST0_KX on Cavium OCTEON.
From: Ralf Baechle <>
Date: Sun, 26 Oct 2008 22:33:31 +0000
Cc:,, Tomaso Paoletti <>, Paul Gortmaker <>
In-reply-to: <>
Original-recipient: rfc822;
References: <> <> <> <>
User-agent: Mutt/1.5.18 (2008-05-17)
On Sun, Oct 26, 2008 at 06:33:44PM -0700, Chad Reese wrote:

> >> -#ifdef CONFIG_64BIT
> >> +#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_CAVIUM_OCTEON)
> >> +  /*
> >> +   * Note: We always set ST0_KX on Octeon since IO addresses are at
> >> +   * 64bit addresses. Keep in mind this also moves the TLB handler.
> >> +   */
> >>    setup_c0_status ST0_KX 0
> > 
> > That's a bit odd - on 64-bit kernels KX would be set anyway and on 32-bit
> > kernels would be corrupted by exceptions or interrupts, so 64-bit
> > addresses are not safe to use on 32-bit kernels for most part.
> > 
> > 32-bit virtual addresses mapped to a non-compat address otoh will work fine
> > without KX set.
> > 
> >   Ralf
> The Octeon IO space regions are significantly larger than a 32bit kernel
> could tlb map easily. The entire range takes 49 bits to address. As a
> not particularly clean, but working alternative, we enable 64bit
> addressing in the kernel and used XKPHYS to access IO. Every access was
> surrounded by a local_irq_save/local_irq_restore. Since this is ugly to
> the extreme, maybe we should drop being able to boot a 32bit kernel on
> Octeon until something better is worked out.

That address space may be huge but for any given application you're
probably only ever going to access a tiny fraction of it - in particular
one where the kernel model of choice is a 32-bit kernel.

If these assumptions don't hold for the Cavium, then I ditching 32-bit
kernels is the obvious choice.  We've given up on 32-bit kernels for the
SGI O2 for example - it was just too ugly, too painful.  For very small
configurations of SGI Origins it would have been possible similarly for
small Broadcom Sibyte configs - but in practice these days we use 64-bit
kernels.  32-bit is just so yesterday and the 64-bit Linux/MIPS kernels
are now nearly a decade old.


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