mirror of
https://github.com/qemu/qemu.git
synced 2026-04-06 14:07:24 +00:00
Merge tag 'pull-request-2026-03-16' of https://gitlab.com/thuth/qemu into staging
* Fix various crashes that can occur when starting QEMU with -device xyz,help * Update various sections in the MAINTAINERS file # -----BEGIN PGP SIGNATURE----- # # iQIyBAABCgAdFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmm33eAACgkQLtnXdP5w # LbUAnA/2NUNIRc18cIAmC5AABoLPeLd96ndPXoayMc78fdJXeM4GsFHqQ0Qqj56B # nSZY9nHHzv8f9n+pVISoffuywP0ldR7+ThKVyps8rkmsXDuBsdNwZU829toq43lg # V0+/UtyxrZLujV581TrmKlPf25sY5BV96YHWzXuUm2E5ikrSzqNcm+1ZNRRhWa5R # gu0bhfAcILnmXxYYrIO/JWM38j7Kz2BHLGN2A8UepORhs5gUg5vk33RaTrzDfbwN # rTxLKjLxYEPV2E9YTBsmMQqsiBomHjw66g5Rtq68KE26RodPeEdLsk9Yd7WbWfEf # HGnZ/l2aZ8OoaricIvUdMQmkAVjxZE4b+a6AiZ38KsJ/3XEXQqbkvGRW3OCkAWOY # kzRuxWJKoPIkvm4jfN39cZEtzHnXdrNgiVCwGuMn0BwqHOPIF/W+5XImOW1dqlTL # CfR11yjUdpW33/hWmXtHkAYDlf5cP7/eL/KStrSv3DkG9/CNTAfwEvjkOyBq3C+K # J/aiufIkbkUr8ZpfJ+eledbAkvvv1/d8/u5vlqyVa4sL7hdcaxQrUDxjojrE7EoM # xB0eS4eFZNsRQn3YrvqyCMxwwO16HyeOOYSv/7Z2wixe/FCRQEjxl02/430ITVNS # MB1/fKUWd4/SUY+BqtBHSo4qNPEbmxzOXKVEJHLS2bqqnDmEcg== # =0ClG # -----END PGP SIGNATURE----- # gpg: Signature made Mon Mar 16 10:39:28 2026 GMT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [undefined] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2026-03-16' of https://gitlab.com/thuth/qemu: MAINTAINERS: Add another reviewer to s390x boot MAINTAINERS: Downgrade the functional testing section to "Odd Fixes" MAINTAINERS: Remove myself from various sections MAINTAINERS: Update the s390x maintainers MAINTAINERS: Update S390-ccw boot maintainers/reviewers hw/acpi: generic_event_device: Don't call qdev_get_machine in initfn hw/arm: fsl-imx6: Don't call qdev_get_machine in soc init hw/arm: fsl-imx8mp: Don't call qdev_get_machine in soc init hw/arm: fsl-imx7: Don't call qdev_get_machine in soc init hw/arm: xlnx-zynqmp: Don't call qdev_get_machine in soc init hw/riscv: microchip_pfsoc: Don't call qdev_get_machine in soc init hw/riscv: sifive_e: Don't call qdev_get_machine in soc init target/mips/cpu: Move initialization of memory region to realize function target/xtensa/cpu: Move initialization of memory region to realize function Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
17
MAINTAINERS
17
MAINTAINERS
@@ -67,7 +67,6 @@ F: */
|
||||
Project policy and developer guides
|
||||
R: Alex Bennée <alex.bennee@linaro.org>
|
||||
R: Daniel P. Berrangé <berrange@redhat.com>
|
||||
R: Thomas Huth <thuth@redhat.com>
|
||||
R: Markus Armbruster <armbru@redhat.com>
|
||||
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
W: https://www.qemu.org/docs/master/devel/index.html
|
||||
@@ -102,7 +101,9 @@ T: git https://github.com/vivier/qemu.git trivial-patches
|
||||
Architecture support
|
||||
--------------------
|
||||
S390 general architecture support
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
M: Cornelia Huck <cohuck@redhat.com>
|
||||
M: Eric Farman <farman@linux.ibm.com>
|
||||
M: Matthew Rosato <mjrosato@linux.ibm.com>
|
||||
S: Supported
|
||||
F: configs/devices/s390x-softmmu/default.mak
|
||||
F: configs/targets/s390x-softmmu.mak
|
||||
@@ -1862,10 +1863,10 @@ T: git https://github.com/borntraeger/qemu.git s390-next
|
||||
L: qemu-s390x@nongnu.org
|
||||
|
||||
S390-ccw boot
|
||||
M: Christian Borntraeger <borntraeger@linux.ibm.com>
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
R: Jared Rossi <jrossi@linux.ibm.com>
|
||||
M: Jared Rossi <jrossi@linux.ibm.com>
|
||||
R: Zhuoying Cai <zycai@linux.ibm.com>
|
||||
R: Christian Borntraeger <borntraeger@linux.ibm.com>
|
||||
R: Jason Herne <jjherne@linux.ibm.com>
|
||||
S: Supported
|
||||
F: hw/s390x/ipl.*
|
||||
F: pc-bios/s390-ccw/
|
||||
@@ -4487,7 +4488,6 @@ Build and test automation, general continuous integration
|
||||
M: Alex Bennée <alex.bennee@linaro.org>
|
||||
T: git https://gitlab.com/stsquad/qemu testing/next
|
||||
M: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
S: Maintained
|
||||
F: .github/workflows/lockdown.yml
|
||||
F: .gitlab-ci.yml
|
||||
@@ -4514,10 +4514,10 @@ F: tests/vm/freebsd
|
||||
W: https://cirrus-ci.com/github/qemu/qemu
|
||||
|
||||
Functional testing framework
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
M: Thomas Huth <th.huth+qemu@posteo.eu>
|
||||
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
R: Daniel P. Berrange <berrange@redhat.com>
|
||||
S: Maintained
|
||||
S: Odd Fixes
|
||||
F: docs/devel/testing/functional.rst
|
||||
F: scripts/clean_functional_cache.py
|
||||
F: tests/functional/meson.build
|
||||
@@ -4584,7 +4584,6 @@ F: scripts/symlink-install-tree.py
|
||||
Top Level Makefile and configure
|
||||
M: Paolo Bonzini <pbonzini@redhat.com>
|
||||
R: Alex Bennée <alex.bennee@linaro.org>
|
||||
R: Thomas Huth <thuth@redhat.com>
|
||||
S: Maintained
|
||||
F: Makefile
|
||||
F: configure
|
||||
|
||||
@@ -506,6 +506,9 @@ static void acpi_ged_realize(DeviceState *dev, Error **errp)
|
||||
uint32_t ged_events;
|
||||
int i;
|
||||
|
||||
acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev),
|
||||
&s->memhp_state, 0);
|
||||
|
||||
if (pcihp_state->use_acpi_hotplug_bridge) {
|
||||
s->ged_event_bitmap |= ACPI_GED_PCI_HOTPLUG_EVT;
|
||||
}
|
||||
@@ -568,8 +571,6 @@ static void acpi_ged_initfn(Object *obj)
|
||||
memory_region_init(&s->container_memhp, OBJECT(dev), "memhp container",
|
||||
MEMORY_HOTPLUG_IO_LEN);
|
||||
sysbus_init_mmio(sbd, &s->container_memhp);
|
||||
acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev),
|
||||
&s->memhp_state, 0);
|
||||
|
||||
memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st,
|
||||
TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT);
|
||||
|
||||
@@ -38,17 +38,10 @@
|
||||
|
||||
static void fsl_imx6_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
FslIMX6State *s = FSL_IMX6(obj);
|
||||
char name[NAME_SIZE];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX6_NUM_CPUS); i++) {
|
||||
snprintf(name, NAME_SIZE, "cpu%d", i);
|
||||
object_initialize_child(obj, name, &s->cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a9"));
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "a9mpcore", &s->a9mpcore, TYPE_A9MPCORE_PRIV);
|
||||
|
||||
object_initialize_child(obj, "ccm", &s->ccm, TYPE_IMX6_CCM);
|
||||
@@ -119,6 +112,7 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
|
||||
unsigned int smp_cpus = ms->smp.cpus;
|
||||
DeviceState *mpcore = DEVICE(&s->a9mpcore);
|
||||
DeviceState *gic;
|
||||
char name[NAME_SIZE];
|
||||
|
||||
if (smp_cpus > FSL_IMX6_NUM_CPUS) {
|
||||
error_setg(errp, "%s: Only %d CPUs are supported (%d requested)",
|
||||
@@ -126,6 +120,12 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < smp_cpus; i++) {
|
||||
snprintf(name, NAME_SIZE, "cpu%d", i);
|
||||
object_initialize_child(OBJECT(dev), name, &s->cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a9"));
|
||||
}
|
||||
|
||||
for (i = 0; i < smp_cpus; i++) {
|
||||
|
||||
/* On uniprocessor, the CBAR is set to 0 */
|
||||
|
||||
@@ -32,20 +32,10 @@
|
||||
|
||||
static void fsl_imx7_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
FslIMX7State *s = FSL_IMX7(obj);
|
||||
char name[NAME_SIZE];
|
||||
int i;
|
||||
|
||||
/*
|
||||
* CPUs
|
||||
*/
|
||||
for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX7_NUM_CPUS); i++) {
|
||||
snprintf(name, NAME_SIZE, "cpu%d", i);
|
||||
object_initialize_child(obj, name, &s->cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a7"));
|
||||
}
|
||||
|
||||
/*
|
||||
* A7MPCORE
|
||||
*/
|
||||
@@ -179,6 +169,15 @@ static void fsl_imx7_realize(DeviceState *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* CPUs
|
||||
*/
|
||||
for (i = 0; i < smp_cpus; i++) {
|
||||
snprintf(name, NAME_SIZE, "cpu%d", i);
|
||||
object_initialize_child(OBJECT(dev), name, &s->cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a7"));
|
||||
}
|
||||
|
||||
/*
|
||||
* CPUs
|
||||
*/
|
||||
|
||||
@@ -193,16 +193,9 @@ static const struct {
|
||||
|
||||
static void fsl_imx8mp_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
FslImx8mpState *s = FSL_IMX8MP(obj);
|
||||
const char *cpu_type = ms->cpu_type ?: ARM_CPU_TYPE_NAME("cortex-a53");
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX8MP_NUM_CPUS); i++) {
|
||||
g_autofree char *name = g_strdup_printf("cpu%d", i);
|
||||
object_initialize_child(obj, name, &s->cpu[i], cpu_type);
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "gic", &s->gic, gicv3_class_name());
|
||||
|
||||
object_initialize_child(obj, "ccm", &s->ccm, TYPE_IMX8MP_CCM);
|
||||
@@ -265,6 +258,7 @@ static void fsl_imx8mp_realize(DeviceState *dev, Error **errp)
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
FslImx8mpState *s = FSL_IMX8MP(dev);
|
||||
DeviceState *gicdev = DEVICE(&s->gic);
|
||||
const char *cpu_type = ms->cpu_type ?: ARM_CPU_TYPE_NAME("cortex-a53");
|
||||
int i;
|
||||
|
||||
if (ms->smp.cpus > FSL_IMX8MP_NUM_CPUS) {
|
||||
@@ -273,6 +267,11 @@ static void fsl_imx8mp_realize(DeviceState *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < ms->smp.cpus; i++) {
|
||||
g_autofree char *name = g_strdup_printf("cpu%d", i);
|
||||
object_initialize_child(OBJECT(dev), name, &s->cpu[i], cpu_type);
|
||||
}
|
||||
|
||||
/* CPUs */
|
||||
for (i = 0; i < ms->smp.cpus; i++) {
|
||||
/* On uniprocessor, the CBAR is set to 0 */
|
||||
|
||||
@@ -380,30 +380,15 @@ static void xlnx_zynqmp_create_unimp_mmio(XlnxZynqMPState *s)
|
||||
|
||||
static void xlnx_zynqmp_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
XlnxZynqMPState *s = XLNX_ZYNQMP(obj);
|
||||
int i;
|
||||
int num_apus = MIN(ms->smp.cpus, XLNX_ZYNQMP_NUM_APU_CPUS);
|
||||
int num_rpus = xlnx_zynqmp_get_rpu_number(ms);
|
||||
|
||||
object_initialize_child(obj, "apu-cluster", &s->apu_cluster,
|
||||
TYPE_CPU_CLUSTER);
|
||||
qdev_prop_set_uint32(DEVICE(&s->apu_cluster), "cluster-id", 0);
|
||||
|
||||
for (i = 0; i < num_apus; i++) {
|
||||
object_initialize_child(OBJECT(&s->apu_cluster), "apu-cpu[*]",
|
||||
&s->apu_cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a53"));
|
||||
}
|
||||
|
||||
object_initialize_child(obj, "gic", &s->gic, gic_class_name());
|
||||
|
||||
if (num_rpus) {
|
||||
/* Do not create the rpu_gic if we don't have rpus */
|
||||
object_initialize_child(obj, "rpu_gic", &s->rpu_gic,
|
||||
gic_class_name());
|
||||
}
|
||||
|
||||
for (i = 0; i < XLNX_ZYNQMP_NUM_GEMS; i++) {
|
||||
object_initialize_child(obj, "gem[*]", &s->gem[i], TYPE_CADENCE_GEM);
|
||||
object_initialize_child(obj, "gem-irq-orgate[*]",
|
||||
@@ -453,15 +438,6 @@ static void xlnx_zynqmp_init(Object *obj)
|
||||
object_initialize_child(obj, "qspi-irq-orgate",
|
||||
&s->qspi_irq_orgate, TYPE_OR_IRQ);
|
||||
|
||||
if (num_rpus) {
|
||||
for (i = 0; i < ARRAY_SIZE(s->splitter); i++) {
|
||||
g_autofree char *name = g_strdup_printf("irq-splitter%d", i);
|
||||
object_initialize_child(obj, name, &s->splitter[i], TYPE_SPLIT_IRQ);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (i = 0; i < XLNX_ZYNQMP_NUM_USB; i++) {
|
||||
object_initialize_child(obj, "usb[*]", &s->usb[i], TYPE_USB_DWC3);
|
||||
}
|
||||
@@ -483,6 +459,24 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
ram_size = memory_region_size(s->ddr_ram);
|
||||
|
||||
for (i = 0; i < num_apus; i++) {
|
||||
object_initialize_child(OBJECT(&s->apu_cluster), "apu-cpu[*]",
|
||||
&s->apu_cpu[i],
|
||||
ARM_CPU_TYPE_NAME("cortex-a53"));
|
||||
}
|
||||
|
||||
if (num_rpus) {
|
||||
/* Do not create the rpu_gic if we don't have rpus */
|
||||
object_initialize_child(OBJECT(dev), "rpu_gic", &s->rpu_gic,
|
||||
gic_class_name());
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s->splitter); i++) {
|
||||
g_autofree char *name = g_strdup_printf("irq-splitter%d", i);
|
||||
object_initialize_child(OBJECT(dev), name, &s->splitter[i], TYPE_SPLIT_IRQ);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create the DDR Memory Regions. User friendly checks should happen at
|
||||
* the board level
|
||||
|
||||
@@ -143,7 +143,6 @@ static const MemMapEntry microchip_pfsoc_memmap[] = {
|
||||
|
||||
static void microchip_pfsoc_soc_instance_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
MicrochipPFSoCState *s = MICROCHIP_PFSOC(obj);
|
||||
|
||||
object_initialize_child(obj, "e-cluster", &s->e_cluster, TYPE_CPU_CLUSTER);
|
||||
@@ -162,7 +161,10 @@ static void microchip_pfsoc_soc_instance_init(Object *obj)
|
||||
|
||||
object_initialize_child(OBJECT(&s->u_cluster), "u-cpus", &s->u_cpus,
|
||||
TYPE_RISCV_HART_ARRAY);
|
||||
qdev_prop_set_uint32(DEVICE(&s->u_cpus), "num-harts", ms->smp.cpus - 1);
|
||||
/*
|
||||
* Set the `num-harts` property later as the machine is potentially not
|
||||
* created yet.
|
||||
*/
|
||||
qdev_prop_set_uint32(DEVICE(&s->u_cpus), "hartid-base", 1);
|
||||
qdev_prop_set_string(DEVICE(&s->u_cpus), "cpu-type",
|
||||
TYPE_RISCV_CPU_SIFIVE_U54);
|
||||
@@ -204,6 +206,7 @@ static void microchip_pfsoc_soc_realize(DeviceState *dev, Error **errp)
|
||||
int i;
|
||||
|
||||
sysbus_realize(SYS_BUS_DEVICE(&s->e_cpus), &error_abort);
|
||||
qdev_prop_set_uint32(DEVICE(&s->u_cpus), "num-harts", ms->smp.cpus - 1);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&s->u_cpus), &error_abort);
|
||||
/*
|
||||
* The cluster must be realized after the RISC-V hart array container,
|
||||
|
||||
@@ -178,12 +178,13 @@ type_init(sifive_e_machine_init_register_types)
|
||||
|
||||
static void sifive_e_soc_init(Object *obj)
|
||||
{
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
SiFiveESoCState *s = RISCV_E_SOC(obj);
|
||||
|
||||
object_initialize_child(obj, "cpus", &s->cpus, TYPE_RISCV_HART_ARRAY);
|
||||
object_property_set_int(OBJECT(&s->cpus), "num-harts", ms->smp.cpus,
|
||||
&error_abort);
|
||||
/*
|
||||
* Set the `num-harts` property later as the machine is potentially not
|
||||
* created yet.
|
||||
*/
|
||||
object_property_set_int(OBJECT(&s->cpus), "resetvec", 0x1004, &error_abort);
|
||||
object_initialize_child(obj, "riscv.sifive.e.gpio0", &s->gpio,
|
||||
TYPE_SIFIVE_GPIO);
|
||||
@@ -200,6 +201,8 @@ static void sifive_e_soc_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
object_property_set_str(OBJECT(&s->cpus), "cpu-type", ms->cpu_type,
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->cpus), "num-harts", ms->smp.cpus,
|
||||
&error_abort);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&s->cpus), &error_fatal);
|
||||
|
||||
/* Mask ROM */
|
||||
|
||||
@@ -460,6 +460,14 @@ static void mips_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(dev);
|
||||
Error *local_err = NULL;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
if (mcc->cpu_def->lcsr_cpucfg2 & (1 << CPUCFG2_LCSRP)) {
|
||||
memory_region_init_io(&env->iocsr.mr, OBJECT(cpu), NULL,
|
||||
env, "iocsr", UINT64_MAX);
|
||||
address_space_init(&env->iocsr.as, &env->iocsr.mr, "IOCSR");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!clock_get(cpu->clock)) {
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
if (!qtest_enabled()) {
|
||||
@@ -504,14 +512,6 @@ static void mips_cpu_initfn(Object *obj)
|
||||
cpu->count_div = clock_new(OBJECT(obj), "clk-div-count");
|
||||
env->count_clock = clock_new(OBJECT(obj), "clk-count");
|
||||
env->cpu_model = mcc->cpu_def;
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
if (mcc->cpu_def->lcsr_cpucfg2 & (1 << CPUCFG2_LCSRP)) {
|
||||
memory_region_init_io(&env->iocsr.mr, OBJECT(cpu), NULL,
|
||||
env, "iocsr", UINT64_MAX);
|
||||
address_space_init(&env->iocsr.as,
|
||||
&env->iocsr.mr, "IOCSR");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static char *mips_cpu_type_name(const char *cpu_model)
|
||||
|
||||
@@ -244,6 +244,14 @@ static void xtensa_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
Error *local_err = NULL;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
CPUXtensaState *env = &XTENSA_CPU(dev)->env;
|
||||
|
||||
env->address_space_er = g_malloc(sizeof(*env->address_space_er));
|
||||
env->system_er = g_malloc(sizeof(*env->system_er));
|
||||
memory_region_init_io(env->system_er, OBJECT(dev), NULL, env, "er",
|
||||
UINT64_C(0x100000000));
|
||||
address_space_init(env->address_space_er, env->system_er, "ER");
|
||||
|
||||
xtensa_irq_init(&XTENSA_CPU(dev)->env);
|
||||
#endif
|
||||
|
||||
@@ -269,12 +277,6 @@ static void xtensa_cpu_initfn(Object *obj)
|
||||
env->config = xcc->config;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
env->address_space_er = g_malloc(sizeof(*env->address_space_er));
|
||||
env->system_er = g_malloc(sizeof(*env->system_er));
|
||||
memory_region_init_io(env->system_er, obj, NULL, env, "er",
|
||||
UINT64_C(0x100000000));
|
||||
address_space_init(env->address_space_er, env->system_er, "ER");
|
||||
|
||||
cpu->clock = qdev_init_clock_in(DEVICE(obj), "clk-in", NULL, cpu, 0);
|
||||
clock_set_hz(cpu->clock, env->config->clock_freq_khz * 1000);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user