mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-target-arm-20230227' of https://git.linaro.org/people/pmaydell/qemu-arm into staging
target-arm queue: * Various code cleanups * More refactoring working towards allowing a build without CONFIG_TCG # -----BEGIN PGP SIGNATURE----- # # iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAmP8ty0ZHHBldGVyLm1h # eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3na0EACToAEGC4/iFigdKD7ZwG3F # FvoDcMRRSdElcSo7BTDrFBBOH5/BYhorUq+mVpPvEYADXNaPOCmXWieSJpu68sJC # VpVLPMhGS8lTsT16C2vB/4Lh4t8pJgs7aej90nqKk2rGgKw4ZNwMS+7Eg6n2lKf/ # V27+O+drJxgYzO6feveuKtIQXsHkx4//DNOCDPLLvrrOk+1NWnyPyT/UDxV/emyr # KLBbeXqcNhPkn7xZtvM7WARSHZcqhEPBkIAJG2H9HE4imxNm8d8ADZjEMbfE9ZNE # MDanpM6BYYDWw4y2A8J5QmbiLu3znH8RWmWHww1v6UQ7qyBCLx+HyEGKipGd3Eoe # 48hi/ktsAJUb1lRrk9gOJ+NsokGINzI5urFOReUh1q6+5us0Q0VpwjyVvhi8REy3 # 5gOMDC7O2zH+bLN08kseDXfc7vR9wLrIHqMloMgJzpjG5KcL67nVCPHcOwxe0sfn # 0SYWUY0UFNSYgEGBG6JfM6LiM1lRREzlw6YnnaJ+GUf/jdIUbMV6PKpL34TGLeQ3 # xEWrKV0+PMoWHwN0Pdo1tMXm7mc/9H27Mf7hB5k0Hp3dfQ7nIdkfnFA2YEUSxIQt # OXYsKLTJmO/4XIAYCHhIOncPTmM6KWNQajDJMIuEdYYV67Xb88EIv5Hg8q6tS/mN # uuQfun3Z2UbAtGvzN5Yx1w== # =K0Vo # -----END PGP SIGNATURE----- # gpg: Signature made Mon 27 Feb 2023 13:59:09 GMT # 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-20230227' of https://git.linaro.org/people/pmaydell/qemu-arm: (25 commits) hw: Replace qemu_or_irq typedef by OrIRQState hw/or-irq: Declare QOM macros using OBJECT_DECLARE_SIMPLE_TYPE() hw/irq: Declare QOM macros using OBJECT_DECLARE_SIMPLE_TYPE() iothread: Remove unused IOThreadClass / IOTHREAD_CLASS hw/arm/musicpal: Remove unused dummy MemoryRegion hw/intc/armv7m_nvic: Use QOM cast CPU() macro hw/timer/cmsdk-apb-timer: Remove unused 'qdev-properties.h' header hw/char/cmsdk-apb-uart: Open-code cmsdk_apb_uart_create() hw/char/xilinx_uartlite: Open-code xilinx_uartlite_create() hw/char/xilinx_uartlite: Expose XILINX_UARTLITE QOM type hw/char/pl011: Open-code pl011_luminary_create() hw/char/pl011: Un-inline pl011_create() hw/gpio/max7310: Simplify max7310_realize() tests/avocado: add machine:none tag to version.py cpu-defs.h: Expose CPUTLBEntryFull to non-TCG code target/arm: Don't access TCG code when debugging with KVM target/arm: Move regime_using_lpae_format into internal.h target/arm: Move hflags code into the tcg directory target/arm: Wrap arm_rebuild_hflags calls with tcg_enabled target/arm: Move psci.c into the tcg directory ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -161,6 +161,7 @@ M: Peter Maydell <peter.maydell@linaro.org>
|
||||
L: qemu-arm@nongnu.org
|
||||
S: Maintained
|
||||
F: target/arm/
|
||||
F: target/arm/tcg/
|
||||
F: tests/tcg/arm/
|
||||
F: tests/tcg/aarch64/
|
||||
F: tests/qtest/arm-cpu-features.c
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/module.h"
|
||||
#include "hw/char/serial.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/arm/allwinner-a10.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
|
||||
+5
-1
@@ -15,6 +15,7 @@
|
||||
#include "hw/arm/boot.h"
|
||||
#include "hw/arm/linux-boot-if.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sysemu/tcg.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "sysemu/numa.h"
|
||||
#include "hw/boards.h"
|
||||
@@ -827,7 +828,10 @@ static void do_cpu_reset(void *opaque)
|
||||
info->secondary_cpu_reset_hook(cpu, info);
|
||||
}
|
||||
}
|
||||
arm_rebuild_hflags(env);
|
||||
|
||||
if (tcg_enabled()) {
|
||||
arm_rebuild_hflags(env);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -507,7 +507,7 @@ static uint64_t exynos4210_calc_affinity(int cpu)
|
||||
return (0x9 << ARM_AFF1_SHIFT) | cpu;
|
||||
}
|
||||
|
||||
static DeviceState *pl330_create(uint32_t base, qemu_or_irq *orgate,
|
||||
static DeviceState *pl330_create(uint32_t base, OrIRQState *orgate,
|
||||
qemu_irq irq, int nreq, int nevents, int width)
|
||||
{
|
||||
SysBusDevice *busdev;
|
||||
@@ -806,7 +806,7 @@ static void exynos4210_init(Object *obj)
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s->pl330_irq_orgate); i++) {
|
||||
char *name = g_strdup_printf("pl330-irq-orgate%d", i);
|
||||
qemu_or_irq *orgate = &s->pl330_irq_orgate[i];
|
||||
OrIRQState *orgate = &s->pl330_irq_orgate[i];
|
||||
|
||||
object_initialize_child(obj, name, orgate, TYPE_OR_IRQ);
|
||||
g_free(name);
|
||||
|
||||
+1
-1
@@ -152,7 +152,7 @@ struct MPS2TZMachineState {
|
||||
TZMSC msc[4];
|
||||
CMSDKAPBUART uart[6];
|
||||
SplitIRQ sec_resp_splitter;
|
||||
qemu_or_irq uart_irq_orgate;
|
||||
OrIRQState uart_irq_orgate;
|
||||
DeviceState *lan9118;
|
||||
SplitIRQ cpu_irq_splitter[MPS2TZ_NUMIRQ_MAX];
|
||||
Clock *sysclk;
|
||||
|
||||
+27
-14
@@ -35,6 +35,7 @@
|
||||
#include "hw/boards.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
#include "hw/char/cmsdk-apb-uart.h"
|
||||
#include "hw/timer/cmsdk-apb-timer.h"
|
||||
@@ -282,6 +283,9 @@ static void mps2_common_init(MachineState *machine)
|
||||
qdev_connect_gpio_out(orgate_dev, 0, qdev_get_gpio_in(armv7m, 12));
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
DeviceState *dev;
|
||||
SysBusDevice *s;
|
||||
|
||||
static const hwaddr uartbase[] = {0x40004000, 0x40005000,
|
||||
0x40006000, 0x40007000,
|
||||
0x40009000};
|
||||
@@ -294,12 +298,16 @@ static void mps2_common_init(MachineState *machine)
|
||||
rxovrint = qdev_get_gpio_in(orgate_dev, i * 2 + 1);
|
||||
}
|
||||
|
||||
cmsdk_apb_uart_create(uartbase[i],
|
||||
qdev_get_gpio_in(armv7m, uartirq[i] + 1),
|
||||
qdev_get_gpio_in(armv7m, uartirq[i]),
|
||||
txovrint, rxovrint,
|
||||
NULL,
|
||||
serial_hd(i), SYSCLK_FRQ);
|
||||
dev = qdev_new(TYPE_CMSDK_APB_UART);
|
||||
s = SYS_BUS_DEVICE(dev);
|
||||
qdev_prop_set_chr(dev, "chardev", serial_hd(i));
|
||||
qdev_prop_set_uint32(dev, "pclk-frq", SYSCLK_FRQ);
|
||||
sysbus_realize_and_unref(s, &error_fatal);
|
||||
sysbus_mmio_map(s, 0, uartbase[i]);
|
||||
sysbus_connect_irq(s, 0, qdev_get_gpio_in(armv7m, uartirq[i] + 1));
|
||||
sysbus_connect_irq(s, 1, qdev_get_gpio_in(armv7m, uartirq[i]));
|
||||
sysbus_connect_irq(s, 2, txovrint);
|
||||
sysbus_connect_irq(s, 3, rxovrint);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -324,7 +332,8 @@ static void mps2_common_init(MachineState *machine)
|
||||
0x4002c000, 0x4002d000,
|
||||
0x4002e000};
|
||||
Object *txrx_orgate;
|
||||
DeviceState *txrx_orgate_dev;
|
||||
DeviceState *txrx_orgate_dev, *dev;
|
||||
SysBusDevice *s;
|
||||
|
||||
txrx_orgate = object_new(TYPE_OR_IRQ);
|
||||
object_property_set_int(txrx_orgate, "num-lines", 2, &error_fatal);
|
||||
@@ -332,13 +341,17 @@ static void mps2_common_init(MachineState *machine)
|
||||
txrx_orgate_dev = DEVICE(txrx_orgate);
|
||||
qdev_connect_gpio_out(txrx_orgate_dev, 0,
|
||||
qdev_get_gpio_in(armv7m, uart_txrx_irqno[i]));
|
||||
cmsdk_apb_uart_create(uartbase[i],
|
||||
qdev_get_gpio_in(txrx_orgate_dev, 0),
|
||||
qdev_get_gpio_in(txrx_orgate_dev, 1),
|
||||
qdev_get_gpio_in(orgate_dev, i * 2),
|
||||
qdev_get_gpio_in(orgate_dev, i * 2 + 1),
|
||||
NULL,
|
||||
serial_hd(i), SYSCLK_FRQ);
|
||||
|
||||
dev = qdev_new(TYPE_CMSDK_APB_UART);
|
||||
s = SYS_BUS_DEVICE(dev);
|
||||
qdev_prop_set_chr(dev, "chardev", serial_hd(i));
|
||||
qdev_prop_set_uint32(dev, "pclk-frq", SYSCLK_FRQ);
|
||||
sysbus_realize_and_unref(s, &error_fatal);
|
||||
sysbus_mmio_map(s, 0, uartbase[i]);
|
||||
sysbus_connect_irq(s, 0, qdev_get_gpio_in(txrx_orgate_dev, 0));
|
||||
sysbus_connect_irq(s, 1, qdev_get_gpio_in(txrx_orgate_dev, 1));
|
||||
sysbus_connect_irq(s, 2, qdev_get_gpio_in(orgate_dev, i * 2));
|
||||
sysbus_connect_irq(s, 3, qdev_get_gpio_in(orgate_dev, i * 2 + 1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1072,7 +1072,6 @@ struct musicpal_key_state {
|
||||
SysBusDevice parent_obj;
|
||||
/*< public >*/
|
||||
|
||||
MemoryRegion iomem;
|
||||
uint32_t kbd_extended;
|
||||
uint32_t pressed_keys;
|
||||
qemu_irq out[8];
|
||||
@@ -1161,9 +1160,6 @@ static void musicpal_key_init(Object *obj)
|
||||
DeviceState *dev = DEVICE(sbd);
|
||||
musicpal_key_state *s = MUSICPAL_KEY(dev);
|
||||
|
||||
memory_region_init(&s->iomem, obj, "dummy", 0);
|
||||
sysbus_init_mmio(sbd, &s->iomem);
|
||||
|
||||
s->kbd_extended = 0;
|
||||
s->pressed_keys = 0;
|
||||
|
||||
|
||||
+8
-3
@@ -1146,9 +1146,14 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (board->dc2 & (1 << i)) {
|
||||
pl011_luminary_create(0x4000c000 + i * 0x1000,
|
||||
qdev_get_gpio_in(nvic, uart_irq[i]),
|
||||
serial_hd(i));
|
||||
SysBusDevice *sbd;
|
||||
|
||||
dev = qdev_new("pl011_luminary");
|
||||
sbd = SYS_BUS_DEVICE(dev);
|
||||
qdev_prop_set_chr(dev, "chardev", serial_hd(i));
|
||||
sysbus_realize_and_unref(sbd, &error_fatal);
|
||||
sysbus_mmio_map(sbd, 0, 0x4000c000 + i * 0x1000);
|
||||
sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(nvic, uart_irq[i]));
|
||||
}
|
||||
}
|
||||
if (board->dc2 & (1 << 4)) {
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/char/pl011.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/qdev-clock.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/qdev-properties-system.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "chardev/char-fe.h"
|
||||
@@ -31,6 +33,21 @@
|
||||
#include "qemu/module.h"
|
||||
#include "trace.h"
|
||||
|
||||
DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr)
|
||||
{
|
||||
DeviceState *dev;
|
||||
SysBusDevice *s;
|
||||
|
||||
dev = qdev_new("pl011");
|
||||
s = SYS_BUS_DEVICE(dev);
|
||||
qdev_prop_set_chr(dev, "chardev", chr);
|
||||
sysbus_realize_and_unref(s, &error_fatal);
|
||||
sysbus_mmio_map(s, 0, addr);
|
||||
sysbus_connect_irq(s, 0, irq);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
#define PL011_INT_TX 0x20
|
||||
#define PL011_INT_RX 0x10
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/log.h"
|
||||
#include "hw/char/xilinx_uartlite.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/qdev-properties-system.h"
|
||||
@@ -53,9 +54,6 @@
|
||||
#define CONTROL_RST_RX 0x02
|
||||
#define CONTROL_IE 0x10
|
||||
|
||||
#define TYPE_XILINX_UARTLITE "xlnx.xps-uartlite"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(XilinxUARTLite, XILINX_UARTLITE)
|
||||
|
||||
struct XilinxUARTLite {
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
|
||||
+4
-5
@@ -26,8 +26,7 @@
|
||||
#include "hw/irq.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
DECLARE_INSTANCE_CHECKER(struct IRQState, IRQ,
|
||||
TYPE_IRQ)
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(IRQState, IRQ)
|
||||
|
||||
struct IRQState {
|
||||
Object parent_obj;
|
||||
@@ -68,7 +67,7 @@ qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n)
|
||||
|
||||
qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n)
|
||||
{
|
||||
struct IRQState *irq;
|
||||
IRQState *irq;
|
||||
|
||||
irq = IRQ(object_new(TYPE_IRQ));
|
||||
irq->handler = handler;
|
||||
@@ -94,7 +93,7 @@ void qemu_free_irq(qemu_irq irq)
|
||||
|
||||
static void qemu_notirq(void *opaque, int line, int level)
|
||||
{
|
||||
struct IRQState *irq = opaque;
|
||||
IRQState *irq = opaque;
|
||||
|
||||
irq->handler(irq->opaque, irq->n, !level);
|
||||
}
|
||||
@@ -120,7 +119,7 @@ void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n)
|
||||
static const TypeInfo irq_type_info = {
|
||||
.name = TYPE_IRQ,
|
||||
.parent = TYPE_OBJECT,
|
||||
.instance_size = sizeof(struct IRQState),
|
||||
.instance_size = sizeof(IRQState),
|
||||
};
|
||||
|
||||
static void irq_register_types(void)
|
||||
|
||||
+9
-9
@@ -31,7 +31,7 @@
|
||||
|
||||
static void or_irq_handler(void *opaque, int n, int level)
|
||||
{
|
||||
qemu_or_irq *s = OR_IRQ(opaque);
|
||||
OrIRQState *s = OR_IRQ(opaque);
|
||||
int or_level = 0;
|
||||
int i;
|
||||
|
||||
@@ -46,7 +46,7 @@ static void or_irq_handler(void *opaque, int n, int level)
|
||||
|
||||
static void or_irq_reset(DeviceState *dev)
|
||||
{
|
||||
qemu_or_irq *s = OR_IRQ(dev);
|
||||
OrIRQState *s = OR_IRQ(dev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_OR_LINES; i++) {
|
||||
@@ -56,7 +56,7 @@ static void or_irq_reset(DeviceState *dev)
|
||||
|
||||
static void or_irq_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
qemu_or_irq *s = OR_IRQ(dev);
|
||||
OrIRQState *s = OR_IRQ(dev);
|
||||
|
||||
assert(s->num_lines <= MAX_OR_LINES);
|
||||
|
||||
@@ -65,7 +65,7 @@ static void or_irq_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
static void or_irq_init(Object *obj)
|
||||
{
|
||||
qemu_or_irq *s = OR_IRQ(obj);
|
||||
OrIRQState *s = OR_IRQ(obj);
|
||||
|
||||
qdev_init_gpio_out(DEVICE(obj), &s->out_irq, 1);
|
||||
}
|
||||
@@ -84,7 +84,7 @@ static void or_irq_init(Object *obj)
|
||||
|
||||
static bool vmstate_extras_needed(void *opaque)
|
||||
{
|
||||
qemu_or_irq *s = OR_IRQ(opaque);
|
||||
OrIRQState *s = OR_IRQ(opaque);
|
||||
|
||||
return s->num_lines >= OLD_MAX_OR_LINES;
|
||||
}
|
||||
@@ -95,7 +95,7 @@ static const VMStateDescription vmstate_or_irq_extras = {
|
||||
.minimum_version_id = 1,
|
||||
.needed = vmstate_extras_needed,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_VARRAY_UINT16_UNSAFE(levels, qemu_or_irq, num_lines, 0,
|
||||
VMSTATE_VARRAY_UINT16_UNSAFE(levels, OrIRQState, num_lines, 0,
|
||||
vmstate_info_bool, bool),
|
||||
VMSTATE_END_OF_LIST(),
|
||||
},
|
||||
@@ -106,7 +106,7 @@ static const VMStateDescription vmstate_or_irq = {
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_BOOL_SUB_ARRAY(levels, qemu_or_irq, 0, OLD_MAX_OR_LINES),
|
||||
VMSTATE_BOOL_SUB_ARRAY(levels, OrIRQState, 0, OLD_MAX_OR_LINES),
|
||||
VMSTATE_END_OF_LIST(),
|
||||
},
|
||||
.subsections = (const VMStateDescription*[]) {
|
||||
@@ -116,7 +116,7 @@ static const VMStateDescription vmstate_or_irq = {
|
||||
};
|
||||
|
||||
static Property or_irq_properties[] = {
|
||||
DEFINE_PROP_UINT16("num-lines", qemu_or_irq, num_lines, 1),
|
||||
DEFINE_PROP_UINT16("num-lines", OrIRQState, num_lines, 1),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
@@ -136,7 +136,7 @@ static void or_irq_class_init(ObjectClass *klass, void *data)
|
||||
static const TypeInfo or_irq_type_info = {
|
||||
.name = TYPE_OR_IRQ,
|
||||
.parent = TYPE_DEVICE,
|
||||
.instance_size = sizeof(qemu_or_irq),
|
||||
.instance_size = sizeof(OrIRQState),
|
||||
.instance_init = or_irq_init,
|
||||
.class_init = or_irq_class_init,
|
||||
};
|
||||
|
||||
+2
-3
@@ -183,11 +183,10 @@ static void max7310_gpio_set(void *opaque, int line, int level)
|
||||
* but also accepts sequences that are not SMBus so return an I2C device. */
|
||||
static void max7310_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
I2CSlave *i2c = I2C_SLAVE(dev);
|
||||
MAX7310State *s = MAX7310(dev);
|
||||
|
||||
qdev_init_gpio_in(&i2c->qdev, max7310_gpio_set, 8);
|
||||
qdev_init_gpio_out(&i2c->qdev, s->handler, 8);
|
||||
qdev_init_gpio_in(dev, max7310_gpio_set, ARRAY_SIZE(s->handler));
|
||||
qdev_init_gpio_out(dev, s->handler, ARRAY_SIZE(s->handler));
|
||||
}
|
||||
|
||||
static void max7310_class_init(ObjectClass *klass, void *data)
|
||||
|
||||
+16
-10
@@ -18,6 +18,7 @@
|
||||
#include "hw/intc/armv7m_nvic.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "sysemu/tcg.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "target/arm/cpu.h"
|
||||
#include "exec/exec-all.h"
|
||||
@@ -577,7 +578,7 @@ static void do_armv7m_nvic_set_pending(void *opaque, int irq, bool secure,
|
||||
* which saves having to have an extra argument is_terminal
|
||||
* that we'd only use in one place.
|
||||
*/
|
||||
cpu_abort(&s->cpu->parent_obj,
|
||||
cpu_abort(CPU(s->cpu),
|
||||
"Lockup: can't take terminal derived exception "
|
||||
"(original exception priority %d)\n",
|
||||
s->vectpending_prio);
|
||||
@@ -643,7 +644,7 @@ static void do_armv7m_nvic_set_pending(void *opaque, int irq, bool secure,
|
||||
* Lockup condition due to a guest bug. We don't model
|
||||
* Lockup, so report via cpu_abort() instead.
|
||||
*/
|
||||
cpu_abort(&s->cpu->parent_obj,
|
||||
cpu_abort(CPU(s->cpu),
|
||||
"Lockup: can't escalate %d to HardFault "
|
||||
"(current priority %d)\n", irq, running);
|
||||
}
|
||||
@@ -741,7 +742,7 @@ void armv7m_nvic_set_pending_lazyfp(NVICState *s, int irq, bool secure)
|
||||
* We want to escalate to HardFault but the context the
|
||||
* FP state belongs to prevents the exception pre-empting.
|
||||
*/
|
||||
cpu_abort(&s->cpu->parent_obj,
|
||||
cpu_abort(CPU(s->cpu),
|
||||
"Lockup: can't escalate to HardFault during "
|
||||
"lazy FP register stacking\n");
|
||||
}
|
||||
@@ -2454,8 +2455,10 @@ static MemTxResult nvic_sysreg_write(void *opaque, hwaddr addr,
|
||||
/* This is UNPREDICTABLE; treat as RAZ/WI */
|
||||
|
||||
exit_ok:
|
||||
/* Ensure any changes made are reflected in the cached hflags. */
|
||||
arm_rebuild_hflags(&s->cpu->env);
|
||||
if (tcg_enabled()) {
|
||||
/* Ensure any changes made are reflected in the cached hflags. */
|
||||
arm_rebuild_hflags(&s->cpu->env);
|
||||
}
|
||||
return MEMTX_OK;
|
||||
}
|
||||
|
||||
@@ -2636,11 +2639,14 @@ static void armv7m_nvic_reset(DeviceState *dev)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We updated state that affects the CPU's MMUidx and thus its hflags;
|
||||
* and we can't guarantee that we run before the CPU reset function.
|
||||
*/
|
||||
arm_rebuild_hflags(&s->cpu->env);
|
||||
if (tcg_enabled()) {
|
||||
/*
|
||||
* We updated state that affects the CPU's MMUidx and thus its
|
||||
* hflags; and we can't guarantee that we run before the CPU
|
||||
* reset function.
|
||||
*/
|
||||
arm_rebuild_hflags(&s->cpu->env);
|
||||
}
|
||||
}
|
||||
|
||||
static void nvic_systick_trigger(void *opaque, int n, int level)
|
||||
|
||||
@@ -100,8 +100,11 @@ petalogix_s3adsp1800_init(MachineState *machine)
|
||||
irq[i] = qdev_get_gpio_in(dev, i);
|
||||
}
|
||||
|
||||
xilinx_uartlite_create(UARTLITE_BASEADDR, irq[UARTLITE_IRQ],
|
||||
serial_hd(0));
|
||||
dev = qdev_new(TYPE_XILINX_UARTLITE);
|
||||
qdev_prop_set_chr(dev, "chardev", serial_hd(0));
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, UARTLITE_BASEADDR);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq[UARTLITE_IRQ]);
|
||||
|
||||
/* 2 timers at irq 2 @ 62 Mhz. */
|
||||
dev = qdev_new("xlnx.xps-timer");
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ DECLARE_INSTANCE_CHECKER(PREPPCIState, RAVEN_PCI_HOST_BRIDGE,
|
||||
struct PRePPCIState {
|
||||
PCIHostState parent_obj;
|
||||
|
||||
qemu_or_irq *or_irq;
|
||||
OrIRQState *or_irq;
|
||||
qemu_irq pci_irqs[PCI_NUM_PINS];
|
||||
PCIBus pci_bus;
|
||||
AddressSpace pci_io_as;
|
||||
|
||||
@@ -135,6 +135,10 @@ typedef struct CPUTLBEntry {
|
||||
|
||||
QEMU_BUILD_BUG_ON(sizeof(CPUTLBEntry) != (1 << CPU_TLB_ENTRY_BITS));
|
||||
|
||||
|
||||
#endif /* !CONFIG_USER_ONLY && CONFIG_TCG */
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
/*
|
||||
* The full TLB entry, which is not accessed by generated TCG code,
|
||||
* so the layout is not as critical as that of CPUTLBEntry. This is
|
||||
@@ -176,7 +180,9 @@ typedef struct CPUTLBEntryFull {
|
||||
TARGET_PAGE_ENTRY_EXTRA
|
||||
#endif
|
||||
} CPUTLBEntryFull;
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY) && defined(CONFIG_TCG)
|
||||
/*
|
||||
* Data elements that are per MMU mode, minus the bits accessed by
|
||||
* the TCG fast path.
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#ifndef HW_ARM_ALLWINNER_A10_H
|
||||
#define HW_ARM_ALLWINNER_A10_H
|
||||
|
||||
#include "hw/char/serial.h"
|
||||
#include "hw/arm/boot.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/timer/allwinner-a10-pit.h"
|
||||
#include "hw/intc/allwinner-a10-pic.h"
|
||||
#include "hw/net/allwinner_emac.h"
|
||||
|
||||
@@ -155,12 +155,12 @@ struct ARMSSE {
|
||||
TZPPC apb_ppc[NUM_INTERNAL_PPCS];
|
||||
TZMPC mpc[IOTS_NUM_MPC];
|
||||
CMSDKAPBTimer timer[3];
|
||||
qemu_or_irq ppc_irq_orgate;
|
||||
OrIRQState ppc_irq_orgate;
|
||||
SplitIRQ sec_resp_splitter;
|
||||
SplitIRQ ppc_irq_splitter[NUM_PPCS];
|
||||
SplitIRQ mpc_irq_splitter[IOTS_NUM_EXP_MPC + IOTS_NUM_MPC];
|
||||
qemu_or_irq mpc_irq_orgate;
|
||||
qemu_or_irq nmi_orgate;
|
||||
OrIRQState mpc_irq_orgate;
|
||||
OrIRQState nmi_orgate;
|
||||
|
||||
SplitIRQ cpu_irq_splitter[NUM_SSE_IRQS];
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ struct BCM2835PeripheralState {
|
||||
BCM2835AuxState aux;
|
||||
BCM2835FBState fb;
|
||||
BCM2835DMAState dma;
|
||||
qemu_or_irq orgated_dma_irq;
|
||||
OrIRQState orgated_dma_irq;
|
||||
BCM2835ICState ic;
|
||||
BCM2835PropertyState property;
|
||||
BCM2835RngState rng;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user