[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/30] hw/nubus-device: round Declaration ROM memory region addres
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 07/30] hw/nubus-device: round Declaration ROM memory region address to qemu_target_page_size() |
Date: |
Tue, 27 Feb 2024 09:39:23 +0100 |
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Declaration ROM binary images can be any arbitrary size, however if a host ROM
memory region is not aligned to qemu_target_page_size() then we fail the
"assert(!(iotlb & ~TARGET_PAGE_MASK))" check in tlb_set_page_full().
Ensure that the host ROM memory region is aligned to qemu_target_page_size()
and adjust the offset at which the Declaration ROM image is loaded, since Nubus
ROM images are unusual in that they are aligned to the end of the slot address
space.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-ID: <20240111102954.449462-2-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/nubus/nubus-device.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c
index 49008e4938..be4cb24696 100644
--- a/hw/nubus/nubus-device.c
+++ b/hw/nubus/nubus-device.c
@@ -10,6 +10,7 @@
#include "qemu/osdep.h"
#include "qemu/datadir.h"
+#include "exec/target_page.h"
#include "hw/irq.h"
#include "hw/loader.h"
#include "hw/nubus/nubus.h"
@@ -30,7 +31,8 @@ static void nubus_device_realize(DeviceState *dev, Error
**errp)
NubusDevice *nd = NUBUS_DEVICE(dev);
char *name, *path;
hwaddr slot_offset;
- int64_t size;
+ int64_t size, align_size;
+ uint8_t *rom_ptr;
int ret;
/* Super */
@@ -76,16 +78,24 @@ static void nubus_device_realize(DeviceState *dev, Error
**errp)
}
name = g_strdup_printf("nubus-slot-%x-declaration-rom", nd->slot);
- memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, size,
+
+ /*
+ * Ensure ROM memory region is aligned to target page size regardless
+ * of the size of the Declaration ROM image
+ */
+ align_size = ROUND_UP(size, qemu_target_page_size());
+ memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, align_size,
&error_abort);
- ret = load_image_mr(path, &nd->decl_rom);
+ rom_ptr = memory_region_get_ram_ptr(&nd->decl_rom);
+ ret = load_image_size(path, rom_ptr + (uintptr_t)(align_size - size),
+ size);
g_free(path);
g_free(name);
if (ret < 0) {
error_setg(errp, "could not load romfile \"%s\"", nd->romfile);
return;
}
- memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - size,
+ memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE -
align_size,
&nd->decl_rom);
}
}
--
2.41.0
- [PULL 00/30] Misc HW patches for 2024-02-27, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 01/30] hw/arm: Inline sysbus_create_simple(PL110 / PL111), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 02/30] hw/display/pl110: Pass frame buffer memory region as link property, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 03/30] hw/arm/exynos4210: Inline sysbus_create_varargs(EXYNOS4210_FIMD), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 04/30] hw/display/exynos4210_fimd: Pass frame buffer memory region as link, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 05/30] hw/i386/kvmvapic: Inline sysbus_address_space(), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 07/30] hw/nubus-device: round Declaration ROM memory region address to qemu_target_page_size(),
Philippe Mathieu-Daudé <=
- [PULL 06/30] hw/sysbus: Remove now unused sysbus_address_space(), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 08/30] hw/nubus: increase maximum Declaration ROM size from 128k to 1Mb, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 09/30] hw/nubus: add nubus-virtio-mmio device, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 10/30] hw/acpi: move object_resolve_type_unambiguous to core QOM, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 11/30] hw/ppc/sam460ex: do not use usb_bus_find(), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 12/30] hw/sh4/r2d: do not use usb_bus_find(), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 14/30] hw/hppa: do not require CONFIG_USB, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 15/30] hw/ppc/mac_newworld: do not require CONFIG_USB, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 13/30] hw/mips/loongson3_virt: do not require CONFIG_USB, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 16/30] hw/ppc/pseries: do not require CONFIG_USB, Philippe Mathieu-Daudé, 2024/02/27