Blame SOURCES/kvm-ppc405_boards-Don-t-size-flash-memory-to-match-backi.patch

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