Subject: Re: [PATCH 05/10] powerpc: Add crash kernel support for 85xx

From: Dale Farnsworth <[email-masked]>
Date: Fri, 18 Jan 2008 16:09:47 -0700

On Fri, Jan 18, 2008 at 04:29:23PM -0600, Kumar Gala wrote:
> On Dec 14, 2007, at 11:23 AM, Dale Farnsworth wrote:
>> On Fri, Dec 14, 2007 at 10:48:58AM -0600, Kumar Gala wrote:
>>> On Nov 22, 2007, at 9:46 AM, Dale Farnsworth wrote:
>>>
>>>> Add the ability to build a ppc_85xx kernel to run at a physical
>>>> address of 32MB.
>>>>
>>>> Signed-off-by: Dale Farnsworth <[email-masked]>
>>>> ---
>>>> arch/powerpc/Kconfig                 |    2 +-
>>>> arch/powerpc/kernel/head_fsl_booke.S |   23 ++++++++++++++++++-----
>>>> arch/powerpc/mm/fsl_booke_mmu.c      |    6 +++---
>>>> 3 files changed, 22 insertions(+), 9 deletions(-)
>>>>
>>>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
>>>> index 805b4d1..d405298 100644
>>>> --- a/arch/powerpc/Kconfig
>>>> +++ b/arch/powerpc/Kconfig
>>>> @@ -253,7 +253,7 @@ config KEXEC
>>>>
>>>> config CRASH_DUMP
>>>> 	bool "Build a kdump crash kernel (EXPERIMENTAL)"
>>>> -	depends on PPC_MULTIPLATFORM && EXPERIMENTAL
>>>> +	depends on (PPC_MULTIPLATFORM || PPC_85xx) && EXPERIMENTAL
>>>> 	help
>>>> 	  Build a kernel suitable for use as a kdump capture kernel.
>>>> 	  The kernel will be linked at a different address than normal, and
>>>> diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/
>>>> kernel/head_fsl_booke.S
>>>> index 4b98227..1c9685f 100644
>>>> --- a/arch/powerpc/kernel/head_fsl_booke.S
>>>> +++ b/arch/powerpc/kernel/head_fsl_booke.S
>>>> @@ -41,6 +41,12 @@
>>>> #include <asm/asm-offsets.h>
>>>> #include "head_booke.h"
>>>>
>>>> +#ifdef CONFIG_CRASH_DUMP
>>>> +#define INITIAL_BOOKE_PAGESZ (BOOKE_PAGESZ_64M)
>>>> +#else
>>>> +#define INITIAL_BOOKE_PAGESZ (BOOKE_PAGESZ_16M)
>>>> +#endif
>>>
>>> I'm ok with bumping the first page to 64M in all cases.
>>
>> OK, I'll make that change in the next rev.  Thanks.
>
> I'm about to commit a version of this patch, why did you need to bump to 
> 64M?

See below.

>> <snip>
>>
>>> The rest looks good.  Does this mean we can boot a e500 kernel at a
>>> non-zero physical address?  (can we run or is the non-zero phy just
>>> for a short period of init time).
>>
>> Yes, with this series of patches, we can boot and run with a classic ppc
>> or e500 kernel at 32MB physical (0xc2000000 virtual).  Note that on
>> classic, we still need memory at phys 0 for the exception vectors.
>> On e500 IIRC, we don't use the vectors at phys 0, but we still write
>> the trampoline vectors there.  I just didn't bother making that 
>> conditional.
>
> trampoline vectors?

Even though the kernel is loaded at 32M, the vectors still reside at 0
(at least on non-booke).  There is code that saves the low 64K away, then
create_trampoline() in crash_dump.c fills each vector with a "b . + 32M"
sequence.

As to why 64M, since the kernel is loaded at 32M, and we still set up
the trampoline vectors at 0, we need more than 16M.  It's possible
that we could skip writing the trampoline vectors on booke and
then just just initially map 16M at 32M.  I haven't tried it and
can't prove that it won't work, but I don't know that it's worth doing.

>> I'll post an updated series soon, with hopes of getting it into 2.6.25

I think my time for doing it "soon" has passed.  Still plan to do it.

Kumar, thanks for pursuing this.

-Dale