From: Jim Fridlund <jim@code4fun.us>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] questions booting Linux on a mpc8247
Date: Wed, 10 May 2006 20:17:29 -0700 [thread overview]
Message-ID: <4462ACC9.8060206@code4fun.us> (raw)
Hi all. I am trying to load Linux on a board with a mpc8247
processor using u-boot-1.1.4 and I'm running into a problems
booting a multi-boot image (Linux kernel + ram disk).
I can load the image via TFTP, but it hangs when I try to
run bootm. I searched in Google, but I couldn't find anything
related to what I'm seeing so I'm hoping I can get some help
from the u-boot community. What I see here is that u-boot gets
a 0x200 exception because it is trying to load the ram disk
image to memory out of range. My board has 128M of memory. Here
is a snippet:
U-Boot 1.1.4 (May 10 2006 - 11:38:41)
MPC8247 Reset Status: Check Stop, External Soft, External Hard
MPC8247 Clock Configuration
- Bus-to-Core Mult 4x, VCO Div 2, 60x Bus Freq 25-75 , Core Freq 100-300
- dfbrg 1, corecnf 0x1a, busdf 5, cpmdf 1, plldf 0, pllmf 5
- vco_out 399999996, scc_clk 99999999, brg_clk 24999999
- cpu_clk 266666664, cpm_clk 199999998, bus_clk 66666666
- pci_clk 66666666
CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 266.666 MHz
Board: MPC 8247
I2C: ready
DRAM: 128 MB
FLASH: 512 kB
Using default environment
In: serial
Out: serial
Err: serial
Net: FCC1 ETHERNET
IDE: Bus 0: OK
Device 0: Model: TOSHIBA THNCF256MMA Firm: 3.10 Ser#: STCB52M6300ZC49843C5
Type: Removable Hard Disk
Capacity: 244.5 MB = 0.2 GB (500736 x 512)
Type "run flash_nfs" to mount root filesystem over NFS
=> tftp
Using FCC1 ETHERNET device
TFTP from server 172.16.86.50; our IP address is 172.16.86.177
Filename 'jim/uImage'.
Load address: 0x100000
Loading: #################################################################
...
done
Bytes transferred = 7326900 (6fccb4 hex)
=> bootm
## Booting image at 00100000 ...
Image Name: Linux with ramdisk
Created: 2006-05-10 22:01:21 UTC
Image Type: PowerPC Linux Multi-File Image (uncompressed)
Data Size: 7326836 Bytes = 7 MB
Load Address: 00000000
Entry Point: 00000000
Contents:
Image 0: 2559077 Bytes = 2.4 MB
Image 1: 4767744 Bytes = 4.5 MB
Verifying Checksum ... OK
OK
Loading Ramdisk to 84344000, end 07f74064 ...
It verifies the image correctly, but the board hangs with a
0x200 exception trying to load the ram disk at 0x84344000
which is out of range. I don't know how u-boot calculates
where it stores the kernel and ram disk at the moment (this
is all magic to me). If I create an image where I specify the
load address, say 16M (0x01000000), it is able to load the ram
disk ok but hangs shortly with exception 0x200.
I generate the multi-boot image by running the following mkimage
command:
$ ./u-boot-1.1.4/tools/mkimage -A ppc -O Linux -T multi -C none -n
'Linux with ramdisk' -d vmlinux:rootfs.powerpc.ext2 uImage.img
Unfortunately, I haven't figured out how to debug u-boot after
it copies the code from rom to memory so progress has slowed.
I am using Vision Probe to debug. I can debug the code prior to
copying itself into memory, but I lose symbols once it relocates
to memory. Does anyone have any advice on how to tackle this? I
saw the GDB serial debug tutorial, but I don't have another serial
port unfortunately.
I also have a question regarding tool chain. I am using uClibC's
buildroot to build a compiler toolchain. At the moment, I am using
gcc 3.4.2 and Linux 2.4.31. I tried using gcc 4.0.2 initially, but
I had a problem with it trying to generate the proper code for
building u-boot. It appears that u-boot is using register r29 as
a global pointer and we had the following code in
./cpu/mpc8260/cpu_init.c:
void cpu_init_f (volatile immap_t * immr)
{
DECLARE_GLOBAL_DATA_PTR;
...
/* Pointer is writable since we allocated a register for it */
gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);
}
For the PPC, DECLARE_GLOBAL_DATA_PTR is defined as:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r29")
As far as I can tell, the above statement is trying to assign
r29 the value of CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET which
is basically an offset in the PPC's internal memory for storing
global data structure. However, gcc 4.0.2 would not generate code
that sets r29 correctly. I temporarily worked around it by adding
a couple of lines in start.S:
/* Hack to initialize R29 since cpu_init_f code isn't working. */
lis r29,(CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@h
ori r29, r29, (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@l
Is anyone using gcc 4.x to build? I reverted to gcc 3.4.2 just to
be on the safe side. Also, I noticed that Linux 2.6.x kernel doesn't
have much support for embedded mpc82xx so I ended up using Linux 2.4.31
which is the most current version that works with uClibC's buildroot.
Is there anyone doing embedded PPC development based on 2.6 kernel and
gcc 4.x? I sure would like to hear your inputs.
Lastly, is there anyone working on a TIPC implementation in u-boot?
I read the white paper on TIPC and it would seem like a nice solution
to have on a distributed/embedded cluster environment such as a
chassis where there is a single control card with multiple dummy
line cards (flashless) on a custom backplane.
Any help or pointers would be greatly appreciated. Thanks in advance.
--
Jim
next reply other threads:[~2006-05-11 3:17 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-11 3:17 Jim Fridlund [this message]
2006-05-11 3:46 ` [U-Boot-Users] questions booting Linux on a mpc8247 Sam Song
2006-05-11 3:56 ` Jim Fridlund
2006-05-11 4:54 ` Sam Song
2006-05-11 5:47 ` Jim Fridlund
2006-05-11 5:54 ` Jim Fridlund
2006-05-11 7:30 ` Wolfgang Denk
2006-05-11 8:01 ` Sam Song
2006-05-11 7:29 ` Wolfgang Denk
2006-05-11 7:26 ` Wolfgang Denk
2006-05-11 8:04 ` Sam Song
2006-05-11 7:24 ` Wolfgang Denk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4462ACC9.8060206@code4fun.us \
--to=jim@code4fun.us \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.