From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org, qemu-block@nongnu.org, qemu-arm@nongnu.org,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Laurent Vivier" <laurent@vivier.eu>
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 [thread overview]
Message-ID: <20240227083948.5427-8-philmd@linaro.org> (raw)
In-Reply-To: <20240227083948.5427-1-philmd@linaro.org>
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
next prev parent reply other threads:[~2024-02-27 8:48 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 8:39 [PULL 00/30] Misc HW patches for 2024-02-27 Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 01/30] hw/arm: Inline sysbus_create_simple(PL110 / PL111) Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 02/30] hw/display/pl110: Pass frame buffer memory region as link property Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 03/30] hw/arm/exynos4210: Inline sysbus_create_varargs(EXYNOS4210_FIMD) Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 04/30] hw/display/exynos4210_fimd: Pass frame buffer memory region as link Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 05/30] hw/i386/kvmvapic: Inline sysbus_address_space() Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 06/30] hw/sysbus: Remove now unused sysbus_address_space() Philippe Mathieu-Daudé
2024-02-27 8:39 ` Philippe Mathieu-Daudé [this message]
2024-02-27 8:39 ` [PULL 08/30] hw/nubus: increase maximum Declaration ROM size from 128k to 1Mb Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 09/30] hw/nubus: add nubus-virtio-mmio device Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 10/30] hw/acpi: move object_resolve_type_unambiguous to core QOM Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 11/30] hw/ppc/sam460ex: do not use usb_bus_find() Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 12/30] hw/sh4/r2d: " Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 13/30] hw/mips/loongson3_virt: do not require CONFIG_USB Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 14/30] hw/hppa: " Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 15/30] hw/ppc/mac_newworld: " Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 16/30] hw/ppc/pseries: " Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 17/30] hw/usb: remove usb_bus_find Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 18/30] hw/usb: extract sysbus-ohci to a separate file Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 19/30] hw/usb: remove duplicate file in system_ss Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 20/30] hw/nvme: fix invalid endian conversion Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 21/30] hw/i386/x86: Let ioapic_init_gsi() take parent as pointer Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 22/30] hw/i386/sgx: Use QDev API Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 23/30] hw/i386/q35: Include missing 'hw/acpi/acpi.h' header Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 24/30] hw/i386/pc: Rename "bus" attribute to "pcibus" Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 25/30] hw/i386/pc_{piix, q35}: Eliminate local pci_bus/pci_host variables Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 26/30] hw/i386/pc: Remove unneeded class attribute "kvmclock_enabled" Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 27/30] hw/i386/pc: Populate RTC attribute directly Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 28/30] hw/arm/sbsa-ref: Do not open-code ahci_ide_create_devs() Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 29/30] hw/ide: Remove last two uses of ide/internal.h outside of hw/ide/ Philippe Mathieu-Daudé
2024-02-27 8:39 ` [PULL 30/30] hw/ide: Include 'ide-internal.h' from current path Philippe Mathieu-Daudé
2024-02-27 12:33 ` [PULL 00/30] Misc HW patches for 2024-02-27 Peter Maydell
2024-02-27 12:33 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240227083948.5427-8-philmd@linaro.org \
--to=philmd@linaro.org \
--cc=laurent@vivier.eu \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).