[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 21/30] hw/i386/x86: Let ioapic_init_gsi() take parent as pointer, (continued)
- [PULL 21/30] hw/i386/x86: Let ioapic_init_gsi() take parent as pointer, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 22/30] hw/i386/sgx: Use QDev API, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 23/30] hw/i386/q35: Include missing 'hw/acpi/acpi.h' header, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 24/30] hw/i386/pc: Rename "bus" attribute to "pcibus", Philippe Mathieu-Daudé, 2024/02/27
- [PULL 25/30] hw/i386/pc_{piix, q35}: Eliminate local pci_bus/pci_host variables, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 26/30] hw/i386/pc: Remove unneeded class attribute "kvmclock_enabled", Philippe Mathieu-Daudé, 2024/02/27
- [PULL 27/30] hw/i386/pc: Populate RTC attribute directly, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 28/30] hw/arm/sbsa-ref: Do not open-code ahci_ide_create_devs(), Philippe Mathieu-Daudé, 2024/02/27
- [PULL 29/30] hw/ide: Remove last two uses of ide/internal.h outside of hw/ide/, Philippe Mathieu-Daudé, 2024/02/27
- [PULL 30/30] hw/ide: Include 'ide-internal.h' from current path, 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é <=
- Re: [PULL 00/30] Misc HW patches for 2024-02-27, Peter Maydell, 2024/02/27