|
|
7711c0 |
From fc257e52fc251e4db6cd7ad604391941a2592556 Mon Sep 17 00:00:00 2001
|
|
|
7711c0 |
From: Markus Armbruster <armbru@redhat.com>
|
|
|
7711c0 |
Date: Fri, 17 May 2019 06:50:59 +0200
|
|
|
7711c0 |
Subject: [PATCH 32/53] ppc405_boards: Don't size flash memory to match backing
|
|
|
7711c0 |
image
|
|
|
7711c0 |
MIME-Version: 1.0
|
|
|
7711c0 |
Content-Type: text/plain; charset=UTF-8
|
|
|
7711c0 |
Content-Transfer-Encoding: 8bit
|
|
|
7711c0 |
|
|
|
7711c0 |
RH-Author: Markus Armbruster <armbru@redhat.com>
|
|
|
7711c0 |
Message-id: <20190517065120.12028-11-armbru@redhat.com>
|
|
|
7711c0 |
Patchwork-id: 88004
|
|
|
7711c0 |
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH v3 10/31] ppc405_boards: Don't size flash memory to match backing image
|
|
|
7711c0 |
Bugzilla: 1624009
|
|
|
7711c0 |
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
|
7711c0 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
7711c0 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
7711c0 |
|
|
|
7711c0 |
Machine "ref405ep" maps its flash memory at address 2^32 - image size.
|
|
|
7711c0 |
Image size is rounded up to the next multiple of 64KiB. Useless,
|
|
|
7711c0 |
because pflash_cfi02_realize() fails with "failed to read the initial
|
|
|
7711c0 |
flash content" unless the rounding is a no-op.
|
|
|
7711c0 |
|
|
|
7711c0 |
If the image size exceeds 0x80000 Bytes, we overlap first SRAM, then
|
|
|
7711c0 |
other stuff. No idea how that would play out, but useful outcomes
|
|
|
7711c0 |
seem unlikely.
|
|
|
7711c0 |
|
|
|
7711c0 |
Map the flash memory at fixed address 0xFFF80000 with size 512KiB,
|
|
|
7711c0 |
regardless of image size, to match the physical hardware.
|
|
|
7711c0 |
|
|
|
7711c0 |
Machine "taihu" maps its boot flash memory similarly. The code even
|
|
|
7711c0 |
has a comment /* XXX: should check that size is 2MB */, followed by
|
|
|
7711c0 |
disabled code to adjust the size to 2MiB regardless of image size.
|
|
|
7711c0 |
|
|
|
7711c0 |
Its code to map its application flash memory looks the same, except
|
|
|
7711c0 |
there the XXX comment asks for 32MiB, and the code to adjust the size
|
|
|
7711c0 |
isn't disabled. Note that pflash_cfi02_realize() fails with "failed
|
|
|
7711c0 |
to read the initial flash content" for images smaller than 32MiB.
|
|
|
7711c0 |
|
|
|
7711c0 |
Map the boot flash memory at fixed address 0xFFE00000 with size 2MiB,
|
|
|
7711c0 |
to match the physical hardware. Delete dead code from application
|
|
|
7711c0 |
flash mapping, and simplify some.
|
|
|
7711c0 |
|
|
|
7711c0 |
Cc: David Gibson <david@gibson.dropbear.id.au>
|
|
|
7711c0 |
Signed-off-by: Markus Armbruster <armbru@redhat.com>
|
|
|
7711c0 |
Acked-by: David Gibson <david@gibson.dropbear.id.au>
|
|
|
7711c0 |
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
|
|
|
7711c0 |
Message-Id: <20190308094610.21210-9-armbru@redhat.com>
|
|
|
7711c0 |
(cherry picked from commit dd59bcae7687df4b2ba8e5292607724996e00892)
|
|
|
7711c0 |
[Trivial conflict in hw/ppc/ppc405_boards.c due to lack of
|
|
|
7711c0 |
commit ab3dd749241]
|
|
|
7711c0 |
|
|
|
7711c0 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
7711c0 |
---
|
|
|
7711c0 |
hw/ppc/ppc405_boards.c | 38 +++++++++++++-------------------------
|
|
|
7711c0 |
1 file changed, 13 insertions(+), 25 deletions(-)
|
|
|
7711c0 |
|
|
|
7711c0 |
diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
|
|
|
7711c0 |
index 2c23e8b..bf32672 100644
|
|
|
7711c0 |
--- a/hw/ppc/ppc405_boards.c
|
|
|
7711c0 |
+++ b/hw/ppc/ppc405_boards.c
|
|
|
7711c0 |
@@ -196,7 +196,7 @@ static void ref405ep_init(MachineState *machine)
|
|
|
7711c0 |
target_ulong kernel_base, initrd_base;
|
|
|
7711c0 |
long kernel_size, initrd_size;
|
|
|
7711c0 |
int linux_boot;
|
|
|
7711c0 |
- int fl_idx, fl_sectors, len;
|
|
|
7711c0 |
+ int len;
|
|
|
7711c0 |
DriveInfo *dinfo;
|
|
|
7711c0 |
MemoryRegion *sysmem = get_system_memory();
|
|
|
7711c0 |
|
|
|
7711c0 |
@@ -224,20 +224,16 @@ static void ref405ep_init(MachineState *machine)
|
|
|
7711c0 |
&error_fatal);
|
|
|
7711c0 |
memory_region_add_subregion(sysmem, 0xFFF00000, sram);
|
|
|
7711c0 |
/* allocate and load BIOS */
|
|
|
7711c0 |
- fl_idx = 0;
|
|
|
7711c0 |
#ifdef USE_FLASH_BIOS
|
|
|
7711c0 |
- dinfo = drive_get(IF_PFLASH, 0, fl_idx);
|
|
|
7711c0 |
+ dinfo = drive_get(IF_PFLASH, 0, 0);
|
|
|
7711c0 |
if (dinfo) {
|
|
|
7711c0 |
- BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
|
|
|
7711c0 |
-
|
|
|
7711c0 |
- bios_size = blk_getlength(blk);
|
|
|
7711c0 |
- fl_sectors = (bios_size + 65535) >> 16;
|
|
|
7711c0 |
+ bios_size = 8 * MiB;
|
|
|
7711c0 |
pflash_cfi02_register((uint32_t)(-bios_size),
|
|
|
7711c0 |
NULL, "ef405ep.bios", bios_size,
|
|
|
7711c0 |
- blk, 65536, fl_sectors, 1,
|
|
|
7711c0 |
+ dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
|
|
|
7711c0 |
+ 64 * KiB, bios_size / (64 * KiB), 1,
|
|
|
7711c0 |
2, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 0x2AA,
|
|
|
7711c0 |
1);
|
|
|
7711c0 |
- fl_idx++;
|
|
|
7711c0 |
} else
|
|
|
7711c0 |
#endif
|
|
|
7711c0 |
{
|
|
|
7711c0 |
@@ -470,7 +466,7 @@ static void taihu_405ep_init(MachineState *machine)
|
|
|
7711c0 |
target_ulong kernel_base, initrd_base;
|
|
|
7711c0 |
long kernel_size, initrd_size;
|
|
|
7711c0 |
int linux_boot;
|
|
|
7711c0 |
- int fl_idx, fl_sectors;
|
|
|
7711c0 |
+ int fl_idx;
|
|
|
7711c0 |
DriveInfo *dinfo;
|
|
|
7711c0 |
|
|
|
7711c0 |
#ifdef TARGET_PPCEMB
|
|
|
7711c0 |
@@ -502,15 +498,11 @@ static void taihu_405ep_init(MachineState *machine)
|
|
|
7711c0 |
#if defined(USE_FLASH_BIOS)
|
|
|
7711c0 |
dinfo = drive_get(IF_PFLASH, 0, fl_idx);
|
|
|
7711c0 |
if (dinfo) {
|
|
|
7711c0 |
- BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
|
|
|
7711c0 |
-
|
|
|
7711c0 |
- bios_size = blk_getlength(blk);
|
|
|
7711c0 |
- /* XXX: should check that size is 2MB */
|
|
|
7711c0 |
- // bios_size = 2 * 1024 * 1024;
|
|
|
7711c0 |
- fl_sectors = (bios_size + 65535) >> 16;
|
|
|
7711c0 |
- pflash_cfi02_register((uint32_t)(-bios_size),
|
|
|
7711c0 |
+ bios_size = 2 * MiB;
|
|
|
7711c0 |
+ pflash_cfi02_register(0xFFE00000,
|
|
|
7711c0 |
NULL, "taihu_405ep.bios", bios_size,
|
|
|
7711c0 |
- blk, 65536, fl_sectors, 1,
|
|
|
7711c0 |
+ dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
|
|
|
7711c0 |
+ 64 * KiB, bios_size / (64 * KiB), 1,
|
|
|
7711c0 |
4, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 0x2AA,
|
|
|
7711c0 |
1);
|
|
|
7711c0 |
fl_idx++;
|
|
|
7711c0 |
@@ -541,14 +533,10 @@ static void taihu_405ep_init(MachineState *machine)
|
|
|
7711c0 |
/* Register Linux flash */
|
|
|
7711c0 |
dinfo = drive_get(IF_PFLASH, 0, fl_idx);
|
|
|
7711c0 |
if (dinfo) {
|
|
|
7711c0 |
- BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
|
|
|
7711c0 |
-
|
|
|
7711c0 |
- bios_size = blk_getlength(blk);
|
|
|
7711c0 |
- /* XXX: should check that size is 32MB */
|
|
|
7711c0 |
- bios_size = 32 * 1024 * 1024;
|
|
|
7711c0 |
- fl_sectors = (bios_size + 65535) >> 16;
|
|
|
7711c0 |
+ bios_size = 32 * MiB;
|
|
|
7711c0 |
pflash_cfi02_register(0xfc000000, NULL, "taihu_405ep.flash", bios_size,
|
|
|
7711c0 |
- blk, 65536, fl_sectors, 1,
|
|
|
7711c0 |
+ dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
|
|
|
7711c0 |
+ 64 * KiB, bios_size / (64 * KiB), 1,
|
|
|
7711c0 |
4, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 0x2AA,
|
|
|
7711c0 |
1);
|
|
|
7711c0 |
fl_idx++;
|
|
|
7711c0 |
--
|
|
|
7711c0 |
1.8.3.1
|
|
|
7711c0 |
|