Skip to content

Commit

Permalink
PPC: E500: Calculate loading blob offsets properly
Browse files Browse the repository at this point in the history
We have 3 blobs we need to load when booting the system:

  - kernel
  - initrd
  - dtb

We place them in physical memory in that order. At least we should.
This patch fixes the location calculation up to take any module into
account, fixing the dtb offset along the way.

Reported-by: Stuart Yoder <stuart.yoder@freescale.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
  • Loading branch information
agraf committed Jan 18, 2013
1 parent 86e56a8 commit 528e536
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions hw/ppc/e500.c
Expand Up @@ -463,7 +463,8 @@ void ppce500_init(PPCE500Params *params)
target_long kernel_size=0;
target_ulong dt_base = 0;
target_ulong initrd_base = 0;
target_long initrd_size=0;
target_long initrd_size = 0;
target_ulong cur_base = 0;
int i = 0, j, k;
unsigned int pci_irq_nrs[4] = {1, 2, 3, 4};
qemu_irq **irqs, *mpic;
Expand Down Expand Up @@ -626,12 +627,13 @@ void ppce500_init(PPCE500Params *params)
params->kernel_filename);
exit(1);
}

cur_base = loadaddr + kernel_size;
}

/* Load initrd. */
if (params->initrd_filename) {
initrd_base = (loadaddr + kernel_size + INITRD_LOAD_PAD) &
~INITRD_PAD_MASK;
initrd_base = (cur_base + INITRD_LOAD_PAD) & ~INITRD_PAD_MASK;
initrd_size = load_image_targphys(params->initrd_filename, initrd_base,
ram_size - initrd_base);

Expand All @@ -640,14 +642,16 @@ void ppce500_init(PPCE500Params *params)
params->initrd_filename);
exit(1);
}

cur_base = initrd_base + initrd_size;
}

/* If we're loading a kernel directly, we must load the device tree too. */
if (params->kernel_filename) {
struct boot_info *boot_info;
int dt_size;

dt_base = (loadaddr + kernel_size + DTC_LOAD_PAD) & ~DTC_PAD_MASK;
dt_base = (cur_base + DTC_LOAD_PAD) & ~DTC_PAD_MASK;
dt_size = ppce500_load_device_tree(env, params, dt_base, initrd_base,
initrd_size);
if (dt_size < 0) {
Expand Down

0 comments on commit 528e536

Please sign in to comment.