summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBALATON Zoltan <balaton@eik.bme.hu>2025-03-01 15:35:36 +0100
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2025-03-05 02:13:38 +0100
commit15571873d76b8fdd6cafb1d268415a1327ae3a6f (patch)
tree52aec86a7011a6601d6287e47090eb5480c117d0
parent902cc3c59eb64bfff95a32de11151209779d118e (diff)
downloadfocaccia-qemu-15571873d76b8fdd6cafb1d268415a1327ae3a6f.tar.gz
focaccia-qemu-15571873d76b8fdd6cafb1d268415a1327ae3a6f.zip
hw/nvram/eeprom_at24c: Reorganise init to avoid overwriting values
The init_rom[] can write values to the beginning of the memory but
these are overwritten by values from a backing file that covers the
whole memory.

init_rom[] is used only if there's no backing file (provides default
content) but should not overwrite backing file content (especially
leaving the file unchanged and only change it in memory).
Do the init_rom[] handling only if it would not be overwritten.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <fd8e0478febd60d5f48c58bc77c60e043d1c3cdc.1740839457.git.balaton@eik.bme.hu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Diffstat (limited to '')
-rw-r--r--hw/nvram/eeprom_at24c.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index 78c81bea77..ff7a21eee7 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -191,10 +191,6 @@ static void at24c_eeprom_realize(DeviceState *dev, Error **errp)
 
     ee->mem = g_malloc0(ee->rsize);
 
-    if (ee->init_rom) {
-        memcpy(ee->mem, ee->init_rom, MIN(ee->init_rom_size, ee->rsize));
-    }
-
     if (ee->blk) {
         int ret = blk_pread(ee->blk, 0, ee->rsize, ee->mem, 0);
 
@@ -204,6 +200,8 @@ static void at24c_eeprom_realize(DeviceState *dev, Error **errp)
             return;
         }
         DPRINTK("Reset read backing file\n");
+    } else if (ee->init_rom) {
+        memcpy(ee->mem, ee->init_rom, MIN(ee->init_rom_size, ee->rsize));
     }
 
     /*