mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-target-arm-20240905' of https://git.linaro.org/people/pmaydell/qemu-arm into staging
target-arm queue: * Implement FEAT_EBF16 emulation * accel/tcg: Remove dead code from rr_cpu_thread_fn() * hw: add compat machines for 9.2 * virt: default to two-stage SMMU from virt-9.2 * sbsa-ref: use two-stage SMMU * hw: Various minor memory leak fixes * target/arm: Correct names of VFP VFNMA and VFNMS insns * hw/arm/xilinx_zynq: Enable Security Extensions * hw/arm/boot: Report error msg if loading elf/dtb failed # -----BEGIN PGP SIGNATURE----- # # iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAmbZqzEZHHBldGVyLm1h # eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3lJ7D/9s/ZTkiCj/z+caHotwNJVt # ECgEEVinitwZxSMINZd1f6bxTY8hYVjMewj6A6RvHtMJMr7SUOmL8wi0YlbhTm44 # jb8dZVf3pzPaZ399jxOeGnFipGyKmK0XM5rKc7CP6yJUS3B9RkUbLEHng8Q0ZBtl # cnZqI12jJBdtHU8D4JIvBgM2N2ay4bKY8EQEPCv4S7ZTKawWcKgSR5pMd2TBIqIT # 0gaDL3eOgCt2XWIrMzRjvaJK70obN/+n+vZQskJ/sIDsw+Kz8sZGlivdBXLRmQ+A # OUgtdyZoD42Q8KtwM0bjoaoxz6VMNPJp5khB45EPjVgWyeyJ0L6ZcWCX7nT4hZsi # 1C0NJaJU6HQbfsPiMIGxgHYJCbQue/mVBE02MPhmN8fZlsTRKWT9Miu67S0PI5Ib # ZWo88Ew1coucBm25K2NWdoR3dCP8EFnxqL556L8M4iDWYQ/djf8cpFAN9QJBFrNw # CaXS+vxIFUjZ6TSjf8gOYPAONmAg5DsCucgyO4MBKnvlY5h2J+GTq/FC+kWzL9jE # UfhqOWSP34ol2lg319zOtKg4Ga+GOivo2DmgWQhDwZ2rmRR+xgN8rkQjpJKIT5Zj # Ji+ucJrghBZ0sN622QYG0u0Ap9Jy4KCOxcFfS1b4gNhmMDWg27Tx9tIguXmjOE3M # aAs4wmm4Nz4kpsf1KkB11Q== # =gZuf # -----END PGP SIGNATURE----- # gpg: Signature made Thu 05 Sep 2024 13:59:29 BST # gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE # gpg: issuer "peter.maydell@linaro.org" # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@gmail.com>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate] # gpg: aka "Peter Maydell <peter@archaic.org.uk>" [ultimate] # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * tag 'pull-target-arm-20240905' of https://git.linaro.org/people/pmaydell/qemu-arm: (25 commits) platform-bus: fix refcount leak hw/arm/boot: Explain why load_elf_hdr() error is ignored hw/arm/boot: Report error msg if loading elf/dtb failed hw/arm/xilinx_zynq: Enable Security Extensions target/arm: Correct names of VFP VFNMA and VFNMS insns hw/arm/sbsa-ref: Don't leak string in sbsa_fdt_add_gic_node() hm/nvram/xlnx-versal-efuse-ctrl: Call register_finalize_block hw/misc/xlnx-versal-trng: Call register_finalize_block hw/nvram/xlnx-zynqmp-efuse: Call register_finalize_block hw/nvram/xlnx-bbram: Call register_finalize_block hw/misc/xlnx-versal-trng: Free s->prng in finalize, not unrealize hw/misc/xlnx-versal-cfu: destroy fifo in finalize hw/arm/sbsa-ref: Use two-stage SMMU hw/arm/virt: Default to two-stage SMMU from virt-9.2 hw/arm/smmuv3: Update comment documenting "stage" property hw: add compat machines for 9.2 accel/tcg: Remove dead code from rr_cpu_thread_fn() target/arm: Enable FEAT_EBF16 in the "max" CPU target/arm: Implement FPCR.EBF=1 semantics for bfdotadd() target/arm: Prepare bfdotadd() callers for FEAT_EBF support ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -302,9 +302,7 @@ static void *rr_cpu_thread_fn(void *arg)
|
||||
rr_deal_with_unplugged_cpus();
|
||||
}
|
||||
|
||||
rcu_remove_force_rcu_notifier(&force_rcu);
|
||||
rcu_unregister_thread();
|
||||
return NULL;
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
void rr_start_vcpu_thread(CPUState *cpu)
|
||||
|
||||
@@ -45,6 +45,7 @@ the following architecture extensions:
|
||||
- FEAT_DotProd (Advanced SIMD dot product instructions)
|
||||
- FEAT_DoubleFault (Double Fault Extension)
|
||||
- FEAT_E0PD (Preventing EL0 access to halves of address maps)
|
||||
- FEAT_EBF16 (AArch64 Extended BFloat16 instructions)
|
||||
- FEAT_ECV (Enhanced Counter Virtualization)
|
||||
- FEAT_EL0 (Support for execution at EL0)
|
||||
- FEAT_EL1 (Support for execution at EL1)
|
||||
|
||||
+8
-2
@@ -799,14 +799,18 @@ static ssize_t arm_load_elf(struct arm_boot_info *info, uint64_t *pentry,
|
||||
} elf_header;
|
||||
int data_swab = 0;
|
||||
bool big_endian;
|
||||
ssize_t ret = -1;
|
||||
ssize_t ret;
|
||||
Error *err = NULL;
|
||||
|
||||
|
||||
load_elf_hdr(info->kernel_filename, &elf_header, &elf_is64, &err);
|
||||
if (err) {
|
||||
/*
|
||||
* If the file is not an ELF file we silently return.
|
||||
* The caller will fall back to try other formats.
|
||||
*/
|
||||
error_free(err);
|
||||
return ret;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (elf_is64) {
|
||||
@@ -839,6 +843,8 @@ static ssize_t arm_load_elf(struct arm_boot_info *info, uint64_t *pentry,
|
||||
1, data_swab, as);
|
||||
if (ret <= 0) {
|
||||
/* The header loaded but the image didn't */
|
||||
error_report("Couldn't load elf '%s': %s",
|
||||
info->kernel_filename, load_elf_strerror(ret));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
+7
-9
@@ -164,23 +164,20 @@ static uint64_t sbsa_ref_cpu_mp_affinity(SBSAMachineState *sms, int idx)
|
||||
|
||||
static void sbsa_fdt_add_gic_node(SBSAMachineState *sms)
|
||||
{
|
||||
char *nodename;
|
||||
const char *intc_nodename = "/intc";
|
||||
const char *its_nodename = "/intc/its";
|
||||
|
||||
nodename = g_strdup_printf("/intc");
|
||||
qemu_fdt_add_subnode(sms->fdt, nodename);
|
||||
qemu_fdt_setprop_sized_cells(sms->fdt, nodename, "reg",
|
||||
qemu_fdt_add_subnode(sms->fdt, intc_nodename);
|
||||
qemu_fdt_setprop_sized_cells(sms->fdt, intc_nodename, "reg",
|
||||
2, sbsa_ref_memmap[SBSA_GIC_DIST].base,
|
||||
2, sbsa_ref_memmap[SBSA_GIC_DIST].size,
|
||||
2, sbsa_ref_memmap[SBSA_GIC_REDIST].base,
|
||||
2, sbsa_ref_memmap[SBSA_GIC_REDIST].size);
|
||||
|
||||
nodename = g_strdup_printf("/intc/its");
|
||||
qemu_fdt_add_subnode(sms->fdt, nodename);
|
||||
qemu_fdt_setprop_sized_cells(sms->fdt, nodename, "reg",
|
||||
qemu_fdt_add_subnode(sms->fdt, its_nodename);
|
||||
qemu_fdt_setprop_sized_cells(sms->fdt, its_nodename, "reg",
|
||||
2, sbsa_ref_memmap[SBSA_GIC_ITS].base,
|
||||
2, sbsa_ref_memmap[SBSA_GIC_ITS].size);
|
||||
|
||||
g_free(nodename);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -621,6 +618,7 @@ static void create_smmu(const SBSAMachineState *sms, PCIBus *bus)
|
||||
|
||||
dev = qdev_new(TYPE_ARM_SMMUV3);
|
||||
|
||||
object_property_set_str(OBJECT(dev), "stage", "nested", &error_abort);
|
||||
object_property_set_link(OBJECT(dev), "primary-bus", OBJECT(bus),
|
||||
&error_abort);
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
|
||||
@@ -1981,6 +1981,7 @@ static Property smmuv3_properties[] = {
|
||||
* Stages of translation advertised.
|
||||
* "1": Stage 1
|
||||
* "2": Stage 2
|
||||
* "nested": Both stage 1 and stage 2
|
||||
* Defaults to stage 1
|
||||
*/
|
||||
DEFINE_PROP_STRING("stage", SMMUv3State, stage),
|
||||
|
||||
+17
-2
@@ -1408,6 +1408,7 @@ static void create_pcie_irq_map(const MachineState *ms,
|
||||
static void create_smmu(const VirtMachineState *vms,
|
||||
PCIBus *bus)
|
||||
{
|
||||
VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
|
||||
char *node;
|
||||
const char compat[] = "arm,smmu-v3";
|
||||
int irq = vms->irqmap[VIRT_SMMU];
|
||||
@@ -1424,6 +1425,9 @@ static void create_smmu(const VirtMachineState *vms,
|
||||
|
||||
dev = qdev_new(TYPE_ARM_SMMUV3);
|
||||
|
||||
if (!vmc->no_nested_smmu) {
|
||||
object_property_set_str(OBJECT(dev), "stage", "nested", &error_fatal);
|
||||
}
|
||||
object_property_set_link(OBJECT(dev), "primary-bus", OBJECT(bus),
|
||||
&error_abort);
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
@@ -3301,10 +3305,21 @@ static void machvirt_machine_init(void)
|
||||
}
|
||||
type_init(machvirt_machine_init);
|
||||
|
||||
static void virt_machine_9_1_options(MachineClass *mc)
|
||||
static void virt_machine_9_2_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(9, 1)
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(9, 2)
|
||||
|
||||
static void virt_machine_9_1_options(MachineClass *mc)
|
||||
{
|
||||
VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
|
||||
|
||||
virt_machine_9_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
/* 9.1 and earlier have only a stage-1 SMMU, not a nested s1+2 one */
|
||||
vmc->no_nested_smmu = true;
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(9, 1)
|
||||
|
||||
static void virt_machine_9_0_options(MachineClass *mc)
|
||||
{
|
||||
|
||||
@@ -219,14 +219,6 @@ static void zynq_init(MachineState *machine)
|
||||
for (n = 0; n < smp_cpus; n++) {
|
||||
Object *cpuobj = object_new(machine->cpu_type);
|
||||
|
||||
/*
|
||||
* By default A9 CPUs have EL3 enabled. This board does not currently
|
||||
* support EL3 so the CPU EL3 property is disabled before realization.
|
||||
*/
|
||||
if (object_property_find(cpuobj, "has_el3")) {
|
||||
object_property_set_bool(cpuobj, "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
object_property_set_int(cpuobj, "midr", ZYNQ_BOARD_MIDR,
|
||||
&error_fatal);
|
||||
object_property_set_int(cpuobj, "reset-cbar", MPCORE_PERIPHBASE,
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
#include "hw/virtio/virtio-iommu.h"
|
||||
#include "audio/audio.h"
|
||||
|
||||
GlobalProperty hw_compat_9_1[] = {};
|
||||
const size_t hw_compat_9_1_len = G_N_ELEMENTS(hw_compat_9_1);
|
||||
|
||||
GlobalProperty hw_compat_9_0[] = {
|
||||
{"arm-cpu", "backcompat-cntfrq", "true" },
|
||||
{ "scsi-hd", "migrate-emulated-scsi-request", "false" },
|
||||
|
||||
@@ -145,9 +145,12 @@ static void platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
* the target device's memory region
|
||||
*/
|
||||
for (off = 0; off < pbus->mmio_size; off += alignment) {
|
||||
if (!memory_region_find(&pbus->mmio, off, size).mr) {
|
||||
MemoryRegion *mr = memory_region_find(&pbus->mmio, off, size).mr;
|
||||
if (!mr) {
|
||||
found_region = true;
|
||||
break;
|
||||
} else {
|
||||
memory_region_unref(mr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
{ "qemu64-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
|
||||
{ "athlon-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },
|
||||
|
||||
GlobalProperty pc_compat_9_1[] = {};
|
||||
const size_t pc_compat_9_1_len = G_N_ELEMENTS(pc_compat_9_1);
|
||||
|
||||
GlobalProperty pc_compat_9_0[] = {
|
||||
{ TYPE_X86_CPU, "x-amd-topoext-features-only", "false" },
|
||||
{ TYPE_X86_CPU, "x-l1-cache-per-thread", "false" },
|
||||
|
||||
+12
-3
@@ -474,13 +474,24 @@ static void pc_i440fx_machine_options(MachineClass *m)
|
||||
"Use a different south bridge than PIIX3");
|
||||
}
|
||||
|
||||
static void pc_i440fx_machine_9_1_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_9_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_machine_options(m);
|
||||
m->alias = "pc";
|
||||
m->is_default = true;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(9, 2);
|
||||
|
||||
static void pc_i440fx_machine_9_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_machine_9_2_options(m);
|
||||
m->alias = NULL;
|
||||
m->is_default = false;
|
||||
compat_props_add(m->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_9_1, pc_compat_9_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(9, 1);
|
||||
|
||||
static void pc_i440fx_machine_9_0_options(MachineClass *m)
|
||||
@@ -488,8 +499,6 @@ static void pc_i440fx_machine_9_0_options(MachineClass *m)
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_machine_9_1_options(m);
|
||||
m->alias = NULL;
|
||||
m->is_default = false;
|
||||
m->smbios_memory_device_size = 16 * GiB;
|
||||
|
||||
compat_props_add(m->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
|
||||
+11
-2
@@ -356,19 +356,28 @@ static void pc_q35_machine_options(MachineClass *m)
|
||||
pc_q35_compat_defaults, pc_q35_compat_defaults_len);
|
||||
}
|
||||
|
||||
static void pc_q35_machine_9_1_options(MachineClass *m)
|
||||
static void pc_q35_machine_9_2_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_machine_options(m);
|
||||
m->alias = "q35";
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(9, 2);
|
||||
|
||||
static void pc_q35_machine_9_1_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_machine_9_2_options(m);
|
||||
m->alias = NULL;
|
||||
compat_props_add(m->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_9_1, pc_compat_9_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(9, 1);
|
||||
|
||||
static void pc_q35_machine_9_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_machine_9_1_options(m);
|
||||
m->alias = NULL;
|
||||
m->smbios_memory_device_size = 16 * GiB;
|
||||
compat_props_add(m->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_9_0, pc_compat_9_0_len);
|
||||
|
||||
+9
-2
@@ -366,10 +366,17 @@ type_init(virt_machine_register_types)
|
||||
#define DEFINE_VIRT_MACHINE(major, minor) \
|
||||
DEFINE_VIRT_MACHINE_IMPL(false, major, minor)
|
||||
|
||||
static void virt_machine_9_1_options(MachineClass *mc)
|
||||
static void virt_machine_9_2_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(9, 1)
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(9, 2)
|
||||
|
||||
static void virt_machine_9_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_9_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(9, 1)
|
||||
|
||||
static void virt_machine_9_0_options(MachineClass *mc)
|
||||
{
|
||||
|
||||
@@ -397,6 +397,13 @@ static void cfu_fdro_init(Object *obj)
|
||||
fifo32_create(&s->fdro_data, 8 * KiB / sizeof(uint32_t));
|
||||
}
|
||||
|
||||
static void cfu_fdro_finalize(Object *obj)
|
||||
{
|
||||
XlnxVersalCFUFDRO *s = XLNX_VERSAL_CFU_FDRO(obj);
|
||||
|
||||
fifo32_destroy(&s->fdro_data);
|
||||
}
|
||||
|
||||
static void cfu_fdro_reset_enter(Object *obj, ResetType type)
|
||||
{
|
||||
XlnxVersalCFUFDRO *s = XLNX_VERSAL_CFU_FDRO(obj);
|
||||
@@ -539,6 +546,7 @@ static const TypeInfo cfu_fdro_info = {
|
||||
.instance_size = sizeof(XlnxVersalCFUFDRO),
|
||||
.class_init = cfu_fdro_class_init,
|
||||
.instance_init = cfu_fdro_init,
|
||||
.instance_finalize = cfu_fdro_finalize,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
{ TYPE_XLNX_CFI_IF },
|
||||
{ }
|
||||
|
||||
@@ -608,9 +608,8 @@ static void trng_init(Object *obj)
|
||||
{
|
||||
XlnxVersalTRng *s = XLNX_VERSAL_TRNG(obj);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
RegisterInfoArray *reg_array;
|
||||
|
||||
reg_array =
|
||||
s->reg_array =
|
||||
register_init_block32(DEVICE(obj), trng_regs_info,
|
||||
ARRAY_SIZE(trng_regs_info),
|
||||
s->regs_info, s->regs,
|
||||
@@ -618,16 +617,17 @@ static void trng_init(Object *obj)
|
||||
XLNX_VERSAL_TRNG_ERR_DEBUG,
|
||||
R_MAX * 4);
|
||||
|
||||
sysbus_init_mmio(sbd, ®_array->mem);
|
||||
sysbus_init_mmio(sbd, &s->reg_array->mem);
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
|
||||
s->prng = g_rand_new();
|
||||
}
|
||||
|
||||
static void trng_unrealize(DeviceState *dev)
|
||||
static void trng_finalize(Object *obj)
|
||||
{
|
||||
XlnxVersalTRng *s = XLNX_VERSAL_TRNG(dev);
|
||||
XlnxVersalTRng *s = XLNX_VERSAL_TRNG(obj);
|
||||
|
||||
register_finalize_block(s->reg_array);
|
||||
g_rand_free(s->prng);
|
||||
s->prng = NULL;
|
||||
}
|
||||
@@ -689,7 +689,6 @@ static void trng_class_init(ObjectClass *klass, void *data)
|
||||
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||
|
||||
dc->vmsd = &vmstate_trng;
|
||||
dc->unrealize = trng_unrealize;
|
||||
rc->phases.hold = trng_reset_hold;
|
||||
|
||||
/* Clone uint64 property with set allowed after realized */
|
||||
@@ -706,6 +705,7 @@ static const TypeInfo trng_info = {
|
||||
.instance_size = sizeof(XlnxVersalTRng),
|
||||
.class_init = trng_class_init,
|
||||
.instance_init = trng_init,
|
||||
.instance_finalize = trng_finalize,
|
||||
};
|
||||
|
||||
static void trng_register_types(void)
|
||||
|
||||
+10
-3
@@ -456,9 +456,8 @@ static void bbram_ctrl_init(Object *obj)
|
||||
{
|
||||
XlnxBBRam *s = XLNX_BBRAM(obj);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
RegisterInfoArray *reg_array;
|
||||
|
||||
reg_array =
|
||||
s->reg_array =
|
||||
register_init_block32(DEVICE(obj), bbram_ctrl_regs_info,
|
||||
ARRAY_SIZE(bbram_ctrl_regs_info),
|
||||
s->regs_info, s->regs,
|
||||
@@ -466,10 +465,17 @@ static void bbram_ctrl_init(Object *obj)
|
||||
XLNX_BBRAM_ERR_DEBUG,
|
||||
R_MAX * 4);
|
||||
|
||||
sysbus_init_mmio(sbd, ®_array->mem);
|
||||
sysbus_init_mmio(sbd, &s->reg_array->mem);
|
||||
sysbus_init_irq(sbd, &s->irq_bbram);
|
||||
}
|
||||
|
||||
static void bbram_ctrl_finalize(Object *obj)
|
||||
{
|
||||
XlnxBBRam *s = XLNX_BBRAM(obj);
|
||||
|
||||
register_finalize_block(s->reg_array);
|
||||
}
|
||||
|
||||
static void bbram_prop_set_drive(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
@@ -537,6 +543,7 @@ static const TypeInfo bbram_ctrl_info = {
|
||||
.instance_size = sizeof(XlnxBBRam),
|
||||
.class_init = bbram_ctrl_class_init,
|
||||
.instance_init = bbram_ctrl_init,
|
||||
.instance_finalize = bbram_ctrl_finalize,
|
||||
};
|
||||
|
||||
static void bbram_ctrl_register_types(void)
|
||||
|
||||
@@ -712,9 +712,8 @@ static void efuse_ctrl_init(Object *obj)
|
||||
{
|
||||
XlnxVersalEFuseCtrl *s = XLNX_VERSAL_EFUSE_CTRL(obj);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
RegisterInfoArray *reg_array;
|
||||
|
||||
reg_array =
|
||||
s->reg_array =
|
||||
register_init_block32(DEVICE(obj), efuse_ctrl_regs_info,
|
||||
ARRAY_SIZE(efuse_ctrl_regs_info),
|
||||
s->regs_info, s->regs,
|
||||
@@ -722,7 +721,7 @@ static void efuse_ctrl_init(Object *obj)
|
||||
XLNX_VERSAL_EFUSE_CTRL_ERR_DEBUG,
|
||||
R_MAX * 4);
|
||||
|
||||
sysbus_init_mmio(sbd, ®_array->mem);
|
||||
sysbus_init_mmio(sbd, &s->reg_array->mem);
|
||||
sysbus_init_irq(sbd, &s->irq_efuse_imr);
|
||||
}
|
||||
|
||||
@@ -730,6 +729,7 @@ static void efuse_ctrl_finalize(Object *obj)
|
||||
{
|
||||
XlnxVersalEFuseCtrl *s = XLNX_VERSAL_EFUSE_CTRL(obj);
|
||||
|
||||
register_finalize_block(s->reg_array);
|
||||
g_free(s->extra_pg0_lock_spec);
|
||||
}
|
||||
|
||||
|
||||
@@ -803,9 +803,8 @@ static void zynqmp_efuse_init(Object *obj)
|
||||
{
|
||||
XlnxZynqMPEFuse *s = XLNX_ZYNQMP_EFUSE(obj);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
RegisterInfoArray *reg_array;
|
||||
|
||||
reg_array =
|
||||
s->reg_array =
|
||||
register_init_block32(DEVICE(obj), zynqmp_efuse_regs_info,
|
||||
ARRAY_SIZE(zynqmp_efuse_regs_info),
|
||||
s->regs_info, s->regs,
|
||||
@@ -813,10 +812,17 @@ static void zynqmp_efuse_init(Object *obj)
|
||||
ZYNQMP_EFUSE_ERR_DEBUG,
|
||||
R_MAX * 4);
|
||||
|
||||
sysbus_init_mmio(sbd, ®_array->mem);
|
||||
sysbus_init_mmio(sbd, &s->reg_array->mem);
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
}
|
||||
|
||||
static void zynqmp_efuse_finalize(Object *obj)
|
||||
{
|
||||
XlnxZynqMPEFuse *s = XLNX_ZYNQMP_EFUSE(obj);
|
||||
|
||||
register_finalize_block(s->reg_array);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_efuse = {
|
||||
.name = TYPE_XLNX_ZYNQMP_EFUSE,
|
||||
.version_id = 1,
|
||||
@@ -853,6 +859,7 @@ static const TypeInfo efuse_info = {
|
||||
.instance_size = sizeof(XlnxZynqMPEFuse),
|
||||
.class_init = zynqmp_efuse_class_init,
|
||||
.instance_init = zynqmp_efuse_init,
|
||||
.instance_finalize = zynqmp_efuse_finalize,
|
||||
};
|
||||
|
||||
static void efuse_register_types(void)
|
||||
|
||||
+14
-3
@@ -4838,14 +4838,25 @@ static void spapr_machine_latest_class_options(MachineClass *mc)
|
||||
DEFINE_SPAPR_MACHINE_IMPL(false, major, minor, _, tag)
|
||||
|
||||
/*
|
||||
* pseries-9.1
|
||||
* pseries-9.2
|
||||
*/
|
||||
static void spapr_machine_9_1_class_options(MachineClass *mc)
|
||||
static void spapr_machine_9_2_class_options(MachineClass *mc)
|
||||
{
|
||||
/* Defaults for the latest behaviour inherited from the base class */
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE_AS_LATEST(9, 1);
|
||||
DEFINE_SPAPR_MACHINE_AS_LATEST(9, 2);
|
||||
|
||||
/*
|
||||
* pseries-9.1
|
||||
*/
|
||||
static void spapr_machine_9_1_class_options(MachineClass *mc)
|
||||
{
|
||||
spapr_machine_9_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(9, 1);
|
||||
|
||||
/*
|
||||
* pseries-9.0
|
||||
|
||||
@@ -871,14 +871,26 @@ static const TypeInfo ccw_machine_info = {
|
||||
DEFINE_CCW_MACHINE_IMPL(false, major, minor)
|
||||
|
||||
|
||||
static void ccw_machine_9_2_instance_options(MachineState *machine)
|
||||
{
|
||||
}
|
||||
|
||||
static void ccw_machine_9_2_class_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_CCW_MACHINE_AS_LATEST(9, 2);
|
||||
|
||||
static void ccw_machine_9_1_instance_options(MachineState *machine)
|
||||
{
|
||||
ccw_machine_9_2_instance_options(machine);
|
||||
}
|
||||
|
||||
static void ccw_machine_9_1_class_options(MachineClass *mc)
|
||||
{
|
||||
ccw_machine_9_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_1, hw_compat_9_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE_AS_LATEST(9, 1);
|
||||
DEFINE_CCW_MACHINE(9, 1);
|
||||
|
||||
static void ccw_machine_9_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user