[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 4/9] PPC: E500: Calculate loading blob offsets properl
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 4/9] PPC: E500: Calculate loading blob offsets properly |
Date: |
Fri, 18 Jan 2013 19:13:36 +0100 |
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 <address@hidden>
Signed-off-by: Alexander Graf <address@hidden>
---
hw/ppc/e500.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 7b3e2e6..e5564ce 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -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;
@@ -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);
@@ -640,6 +642,8 @@ 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. */
@@ -647,7 +651,7 @@ void ppce500_init(PPCE500Params *params)
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) {
--
1.6.0.2
- [Qemu-ppc] [PULL 0/9] ppc patch queue 2013-01-18, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 2/9] openpic: unify gcr mode mask updates, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 5/9] PPC: Provide zero SVR for -cpu e500mc and e5500, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 1/9] openpic: move gcr write into a function, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 8/9] openpic: export e500 epr enable into a ppc.c function, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 7/9] Update Linux kernel headers, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 6/9] PPC: e500: Change in-memory order of load blobs, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 4/9] PPC: E500: Calculate loading blob offsets properly,
Alexander Graf <=
- [Qemu-ppc] [PATCH 3/9] openpic: set mixed mode as supported, Alexander Graf, 2013/01/18
- [Qemu-ppc] [PATCH 9/9] PPC: KVM: Add support for EPR with KVM, Alexander Graf, 2013/01/18
- Re: [Qemu-ppc] [PULL 0/9] ppc patch queue 2013-01-18, Blue Swirl, 2013/01/19