Message ID | 1268519780-6607-1-git-send-email-weil@mail.berlios.de |
---|---|
State | New |
Headers | show |
> Commit 30724e758a21ba9f807efafe268626bd479db9de breaks > malta (and other) mips 32 bit emulation. > > Fixing the physical address size for 32 bit machines > makes it work again. >-#define TARGET_PHYS_ADDR_SPACE_BITS 36 >+#define TARGET_PHYS_ADDR_SPACE_BITS 32 This is almost certainly the wrong change. Paul
Paul Brook schrieb: >> Commit 30724e758a21ba9f807efafe268626bd479db9de breaks >> malta (and other) mips 32 bit emulation. >> >> Fixing the physical address size for 32 bit machines >> makes it work again. > >> -#define TARGET_PHYS_ADDR_SPACE_BITS 36 >> +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > > This is almost certainly the wrong change. > > Paul Yes, Aurelien already said this, too, and I agree that my patch fixes the problem but is the wrong solution. The wrong part seems to be loading or starting of the elf kernel image: the "boot loader" jumps to a memory location which is filled with nops (0). Either the load address of the kernel code is wrong, or the boot loader jumps to the wrong address. The problem is also malta specific - mips ar7 emulation works fine. I did not test the other mips machines, so I cannot say whether they have this problem, too (maybe yes because of code copy + paste). Regards, Stefan
On Sun, Mar 14, 2010 at 05:28:51PM +0100, Stefan Weil wrote: > Paul Brook schrieb: > >> Commit 30724e758a21ba9f807efafe268626bd479db9de breaks > >> malta (and other) mips 32 bit emulation. > >> > >> Fixing the physical address size for 32 bit machines > >> makes it work again. > > > >> -#define TARGET_PHYS_ADDR_SPACE_BITS 36 > >> +#define TARGET_PHYS_ADDR_SPACE_BITS 32 > > > > This is almost certainly the wrong change. > > > > Paul > > Yes, Aurelien already said this, too, and I agree that my patch > fixes the problem but is the wrong solution. > > The wrong part seems to be loading or starting of the elf kernel image: > the "boot loader" jumps to a memory location which is filled with > nops (0). Either the load address of the kernel code is wrong, or > the boot loader jumps to the wrong address. > > The problem is also malta specific - mips ar7 emulation works fine. > I did not test the other mips machines, so I cannot say whether they > have this problem, too (maybe yes because of code copy + paste). > Yes, the problem is that load_elf() only support mangling the addresses through an addend. This is not working on MIPS as the addend would be different depending on the type of ELF kernel (32 or 64-bit). The correct operation for MIPS is too mangle the upper bits to do a kseg0 -> physical translation. I am working on a patch, will post it later today.
diff --git a/target-mips/mips-defs.h b/target-mips/mips-defs.h index c57de02..dc1ac80 100644 --- a/target-mips/mips-defs.h +++ b/target-mips/mips-defs.h @@ -14,7 +14,7 @@ #define TARGET_VIRT_ADDR_SPACE_BITS 42 #else #define TARGET_LONG_BITS 32 -#define TARGET_PHYS_ADDR_SPACE_BITS 36 +#define TARGET_PHYS_ADDR_SPACE_BITS 32 #define TARGET_VIRT_ADDR_SPACE_BITS 32 #endif
Commit 30724e758a21ba9f807efafe268626bd479db9de breaks malta (and other) mips 32 bit emulation. Fixing the physical address size for 32 bit machines makes it work again. Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- target-mips/mips-defs.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)