diff options
| -rw-r--r-- | audio/winwaveaudio.c | 2 | ||||
| -rw-r--r-- | block/qcow2-cluster.c | 2 | ||||
| -rw-r--r-- | cpu-exec.c | 17 | ||||
| -rw-r--r-- | default-configs/microblaze-softmmu.mak | 2 | ||||
| -rw-r--r-- | default-configs/microblazeel-softmmu.mak | 2 | ||||
| -rw-r--r-- | default-configs/ppc-softmmu.mak | 1 | ||||
| -rw-r--r-- | default-configs/ppc64-softmmu.mak | 1 | ||||
| -rw-r--r-- | default-configs/ppcemb-softmmu.mak | 1 | ||||
| -rw-r--r-- | hw/Makefile.objs | 7 | ||||
| -rw-r--r-- | hw/microblaze/Makefile.objs | 5 | ||||
| -rw-r--r-- | hw/petalogix_ml605_mmu.c | 2 | ||||
| -rw-r--r-- | hw/petalogix_s3adsp1800_mmu.c | 4 | ||||
| -rw-r--r-- | hw/ppc/Makefile.objs | 3 | ||||
| -rw-r--r-- | hw/virtex_ml507.c | 2 | ||||
| -rw-r--r-- | hw/xilinx.h | 30 | ||||
| -rw-r--r-- | hw/xilinx_axidma.c | 6 | ||||
| -rw-r--r-- | hw/xilinx_axienet.c | 6 | ||||
| -rw-r--r-- | hw/xilinx_ethlite.c | 9 | ||||
| -rw-r--r-- | hw/xilinx_intc.c | 4 | ||||
| -rw-r--r-- | hw/xilinx_timer.c | 23 | ||||
| -rw-r--r-- | hw/xilinx_uartlite.c | 5 | ||||
| -rw-r--r-- | qemu-log.h | 2 | ||||
| -rw-r--r-- | target-cris/cpu.h | 4 | ||||
| -rw-r--r-- | target-cris/helper.c | 8 | ||||
| -rw-r--r-- | target-cris/op_helper.c | 4 | ||||
| -rw-r--r-- | target-cris/translate_v10.c | 1 |
26 files changed, 90 insertions, 63 deletions
diff --git a/audio/winwaveaudio.c b/audio/winwaveaudio.c index 87e7493270..663abb9b50 100644 --- a/audio/winwaveaudio.c +++ b/audio/winwaveaudio.c @@ -72,7 +72,7 @@ static void winwave_log_mmresult (MMRESULT mr) break; case MMSYSERR_NOMEM: - str = "Unable to allocate or locl memory"; + str = "Unable to allocate or lock memory"; break; case WAVERR_SYNC: diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 4b3345b11b..c173fcd488 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -471,6 +471,8 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, QCOW_OFLAG_COMPRESSED | QCOW_OFLAG_ZERO); *cluster_offset &= L2E_OFFSET_MASK; break; + default: + abort(); } qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); diff --git a/cpu-exec.c b/cpu-exec.c index 83cac932ed..624c409f7b 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -467,11 +467,18 @@ int cpu_exec(CPUArchState *env) do_interrupt(env); next_tb = 0; } - if (interrupt_request & CPU_INTERRUPT_NMI - && (env->pregs[PR_CCS] & M_FLAG)) { - env->exception_index = EXCP_NMI; - do_interrupt(env); - next_tb = 0; + if (interrupt_request & CPU_INTERRUPT_NMI) { + unsigned int m_flag_archval; + if (env->pregs[PR_VR] < 32) { + m_flag_archval = M_FLAG_V10; + } else { + m_flag_archval = M_FLAG_V32; + } + if ((env->pregs[PR_CCS] & m_flag_archval)) { + env->exception_index = EXCP_NMI; + do_interrupt(env); + next_tb = 0; + } } #elif defined(TARGET_M68K) if (interrupt_request & CPU_INTERRUPT_HARD diff --git a/default-configs/microblaze-softmmu.mak b/default-configs/microblaze-softmmu.mak index 613edab742..64c9485de4 100644 --- a/default-configs/microblaze-softmmu.mak +++ b/default-configs/microblaze-softmmu.mak @@ -3,3 +3,5 @@ CONFIG_PTIMER=y CONFIG_PFLASH_CFI01=y CONFIG_SERIAL=y +CONFIG_XILINX=y +CONFIG_XILINX_AXI=y diff --git a/default-configs/microblazeel-softmmu.mak b/default-configs/microblazeel-softmmu.mak index 4b40fb21a5..a9622760c9 100644 --- a/default-configs/microblazeel-softmmu.mak +++ b/default-configs/microblazeel-softmmu.mak @@ -3,3 +3,5 @@ CONFIG_PTIMER=y CONFIG_PFLASH_CFI01=y CONFIG_SERIAL=y +CONFIG_XILINX=y +CONFIG_XILINX_AXI=y diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak index 1a768fc519..d0fde7b93d 100644 --- a/default-configs/ppc-softmmu.mak +++ b/default-configs/ppc-softmmu.mak @@ -36,3 +36,4 @@ CONFIG_PFLASH_CFI01=y CONFIG_PFLASH_CFI02=y CONFIG_PTIMER=y CONFIG_I8259=y +CONFIG_XILINX=y diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-softmmu.mak index f490368c64..e4265b4978 100644 --- a/default-configs/ppc64-softmmu.mak +++ b/default-configs/ppc64-softmmu.mak @@ -33,3 +33,4 @@ CONFIG_PFLASH_CFI01=y CONFIG_PFLASH_CFI02=y CONFIG_PTIMER=y CONFIG_I8259=y +CONFIG_XILINX=y diff --git a/default-configs/ppcemb-softmmu.mak b/default-configs/ppcemb-softmmu.mak index 829f462105..aaa9cdc1f7 100644 --- a/default-configs/ppcemb-softmmu.mak +++ b/default-configs/ppcemb-softmmu.mak @@ -33,3 +33,4 @@ CONFIG_PFLASH_CFI01=y CONFIG_PFLASH_CFI02=y CONFIG_PTIMER=y CONFIG_I8259=y +CONFIG_XILINX=y diff --git a/hw/Makefile.objs b/hw/Makefile.objs index 7e17504278..3d7725934f 100644 --- a/hw/Makefile.objs +++ b/hw/Makefile.objs @@ -59,6 +59,13 @@ hw-obj-$(CONFIG_PIIX4) += piix4.o hw-obj-$(CONFIG_G364FB) += g364fb.o hw-obj-$(CONFIG_JAZZ_LED) += jazz_led.o +# Xilinx devices +hw-obj-$(CONFIG_XILINX) += xilinx_intc.o +hw-obj-$(CONFIG_XILINX) += xilinx_timer.o +hw-obj-$(CONFIG_XILINX) += xilinx_uartlite.o +hw-obj-$(CONFIG_XILINX_AXI) += xilinx_axidma.o +hw-obj-$(CONFIG_XILINX_AXI) += xilinx_axienet.o + # PCI watchdog devices hw-obj-$(CONFIG_PCI) += wdt_i6300esb.o diff --git a/hw/microblaze/Makefile.objs b/hw/microblaze/Makefile.objs index 020f7b6e9b..274d2c543e 100644 --- a/hw/microblaze/Makefile.objs +++ b/hw/microblaze/Makefile.objs @@ -3,12 +3,7 @@ obj-y += petalogix_ml605_mmu.o obj-y += microblaze_boot.o obj-y += microblaze_pic_cpu.o -obj-y += xilinx_intc.o -obj-y += xilinx_timer.o -obj-y += xilinx_uartlite.o obj-y += xilinx_ethlite.o -obj-y += xilinx_axidma.o -obj-y += xilinx_axienet.o obj-$(CONFIG_FDT) += ../device_tree.o obj-y := $(addprefix ../,$(obj-y)) diff --git a/hw/petalogix_ml605_mmu.c b/hw/petalogix_ml605_mmu.c index bff63e389a..6a7d0c0bff 100644 --- a/hw/petalogix_ml605_mmu.c +++ b/hw/petalogix_ml605_mmu.c @@ -123,7 +123,7 @@ petalogix_ml605_init(ram_addr_t ram_size, irq[5], 115200, serial_hds[0], DEVICE_LITTLE_ENDIAN); /* 2 timers at irq 2 @ 100 Mhz. */ - xilinx_timer_create(TIMER_BASEADDR, irq[2], 2, 100 * 1000000); + xilinx_timer_create(TIMER_BASEADDR, irq[2], 0, 100 * 1000000); /* axi ethernet and dma initialization. TODO: Dynamically connect them. */ { diff --git a/hw/petalogix_s3adsp1800_mmu.c b/hw/petalogix_s3adsp1800_mmu.c index f41c559e61..2cf68828ed 100644 --- a/hw/petalogix_s3adsp1800_mmu.c +++ b/hw/petalogix_s3adsp1800_mmu.c @@ -104,9 +104,9 @@ petalogix_s3adsp1800_init(ram_addr_t ram_size, irq[i] = qdev_get_gpio_in(dev, i); } - sysbus_create_simple("xilinx,uartlite", UARTLITE_BASEADDR, irq[3]); + sysbus_create_simple("xlnx.xps-uartlite", UARTLITE_BASEADDR, irq[3]); /* 2 timers at irq 2 @ 62 Mhz. */ - xilinx_timer_create(TIMER_BASEADDR, irq[0], 2, 62 * 1000000); + xilinx_timer_create(TIMER_BASEADDR, irq[0], 0, 62 * 1000000); xilinx_ethlite_create(&nd_table[0], ETHLITE_BASEADDR, irq[1], 0, 0); microblaze_load_kernel(cpu, ddr_base, ram_size, diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs index d0ef8a26cf..44a1e8cdab 100644 --- a/hw/ppc/Makefile.objs +++ b/hw/ppc/Makefile.objs @@ -23,9 +23,6 @@ obj-y += openpic.o obj-$(CONFIG_FDT) += ../device_tree.o # Xilinx PPC peripherals -obj-y += xilinx_intc.o -obj-y += xilinx_timer.o -obj-y += xilinx_uartlite.o obj-y += xilinx_ethlite.o obj-y := $(addprefix ../,$(obj-y)) diff --git a/hw/virtex_ml507.c b/hw/virtex_ml507.c index cace86b5e4..79bc0d10ee 100644 --- a/hw/virtex_ml507.c +++ b/hw/virtex_ml507.c @@ -229,7 +229,7 @@ static void virtex_init(ram_addr_t ram_size, serial_hds[0], DEVICE_LITTLE_ENDIAN); /* 2 timers at irq 2 @ 62 Mhz. */ - xilinx_timer_create(0x83c00000, irq[3], 2, 62 * 1000000); + xilinx_timer_create(0x83c00000, irq[3], 0, 62 * 1000000); if (kernel_filename) { uint64_t entry, low, high; diff --git a/hw/xilinx.h b/hw/xilinx.h index 35f35bd7fc..7df21eb958 100644 --- a/hw/xilinx.h +++ b/hw/xilinx.h @@ -6,7 +6,7 @@ xilinx_intc_create(target_phys_addr_t base, qemu_irq irq, int kind_of_intr) { DeviceState *dev; - dev = qdev_create(NULL, "xilinx,intc"); + dev = qdev_create(NULL, "xlnx.xps-intc"); qdev_prop_set_uint32(dev, "kind-of-intr", kind_of_intr); qdev_init_nofail(dev); sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); @@ -16,12 +16,12 @@ xilinx_intc_create(target_phys_addr_t base, qemu_irq irq, int kind_of_intr) /* OPB Timer/Counter. */ static inline DeviceState * -xilinx_timer_create(target_phys_addr_t base, qemu_irq irq, int nr, int freq) +xilinx_timer_create(target_phys_addr_t base, qemu_irq irq, int oto, int freq) { DeviceState *dev; - dev = qdev_create(NULL, "xilinx,timer"); - qdev_prop_set_uint32(dev, "nr-timers", nr); + dev = qdev_create(NULL, "xlnx,xps-timer"); + qdev_prop_set_uint32(dev, "one-timer-only", oto); qdev_prop_set_uint32(dev, "frequency", freq); qdev_init_nofail(dev); sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); @@ -36,12 +36,12 @@ xilinx_ethlite_create(NICInfo *nd, target_phys_addr_t base, qemu_irq irq, { DeviceState *dev; - qemu_check_nic_model(nd, "xilinx-ethlite"); + qemu_check_nic_model(nd, "xlnx.xps-ethernetlite"); - dev = qdev_create(NULL, "xilinx,ethlite"); + dev = qdev_create(NULL, "xlnx.xps-ethernetlite"); qdev_set_nic_properties(dev, nd); - qdev_prop_set_uint32(dev, "txpingpong", txpingpong); - qdev_prop_set_uint32(dev, "rxpingpong", rxpingpong); + qdev_prop_set_uint32(dev, "tx-ping-pong", txpingpong); + qdev_prop_set_uint32(dev, "rx-ping-pong", rxpingpong); qdev_init_nofail(dev); sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); @@ -54,12 +54,12 @@ xilinx_axiethernet_create(void *dmach, int txmem, int rxmem) { DeviceState *dev; - qemu_check_nic_model(nd, "xilinx-axienet"); + qemu_check_nic_model(nd, "xlnx.axi-ethernet"); - dev = qdev_create(NULL, "xilinx,axienet"); + dev = qdev_create(NULL, "xlnx.axi-ethernet"); qdev_set_nic_properties(dev, nd); - qdev_prop_set_uint32(dev, "c_rxmem", rxmem); - qdev_prop_set_uint32(dev, "c_txmem", txmem); + qdev_prop_set_uint32(dev, "rxmem", rxmem); + qdev_prop_set_uint32(dev, "txmem", txmem); qdev_prop_set_ptr(dev, "dmach", dmach); qdev_init_nofail(dev); sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); @@ -75,14 +75,14 @@ xilinx_axiethernetdma_create(void *dmach, { DeviceState *dev = NULL; - dev = qdev_create(NULL, "xilinx,axidma"); + dev = qdev_create(NULL, "xlnx.axi-dma"); qdev_prop_set_uint32(dev, "freqhz", freqhz); qdev_prop_set_ptr(dev, "dmach", dmach); qdev_init_nofail(dev); sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); - sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq2); - sysbus_connect_irq(sysbus_from_qdev(dev), 1, irq); + sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); + sysbus_connect_irq(sysbus_from_qdev(dev), 1, irq2); return dev; } diff --git a/hw/xilinx_axidma.c b/hw/xilinx_axidma.c index 85dfcbf2b9..f4bec37c7a 100644 --- a/hw/xilinx_axidma.c +++ b/hw/xilinx_axidma.c @@ -463,8 +463,8 @@ static int xilinx_axidma_init(SysBusDevice *dev) struct XilinxAXIDMA *s = FROM_SYSBUS(typeof(*s), dev); int i; - sysbus_init_irq(dev, &s->streams[1].irq); sysbus_init_irq(dev, &s->streams[0].irq); + sysbus_init_irq(dev, &s->streams[1].irq); if (!s->dmach) { hw_error("Unconnected DMA channel.\n"); @@ -473,7 +473,7 @@ static int xilinx_axidma_init(SysBusDevice *dev) xlx_dma_connect_dma(s->dmach, s, axidma_push); memory_region_init_io(&s->iomem, &axidma_ops, s, - "axidma", R_MAX * 4 * 2); + "xlnx.axi-dma", R_MAX * 4 * 2); sysbus_init_mmio(dev, &s->iomem); for (i = 0; i < 2; i++) { @@ -502,7 +502,7 @@ static void axidma_class_init(ObjectClass *klass, void *data) } static TypeInfo axidma_info = { - .name = "xilinx,axidma", + .name = "xlnx.axi-dma", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(struct XilinxAXIDMA), .class_init = axidma_class_init, diff --git a/hw/xilinx_axienet.c b/hw/xilinx_axienet.c index 7526273b4d..2e8d8a59ba 100644 --- a/hw/xilinx_axienet.c +++ b/hw/xilinx_axienet.c @@ -872,8 +872,8 @@ static int xilinx_enet_init(SysBusDevice *dev) static Property xilinx_enet_properties[] = { DEFINE_PROP_UINT32("phyaddr", struct XilinxAXIEnet, c_phyaddr, 7), - DEFINE_PROP_UINT32("c_rxmem", struct XilinxAXIEnet, c_rxmem, 0x1000), - DEFINE_PROP_UINT32("c_txmem", struct XilinxAXIEnet, c_txmem, 0x1000), + DEFINE_PROP_UINT32("rxmem", struct XilinxAXIEnet, c_rxmem, 0x1000), + DEFINE_PROP_UINT32("txmem", struct XilinxAXIEnet, c_txmem, 0x1000), DEFINE_PROP_PTR("dmach", struct XilinxAXIEnet, dmach), DEFINE_NIC_PROPERTIES(struct XilinxAXIEnet, conf), DEFINE_PROP_END_OF_LIST(), @@ -889,7 +889,7 @@ static void xilinx_enet_class_init(ObjectClass *klass, void *data) } static TypeInfo xilinx_enet_info = { - .name = "xilinx,axienet", + .name = "xlnx.axi-ethernet", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(struct XilinxAXIEnet), .class_init = xilinx_enet_class_init, diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c index 857b33d172..affbb8bfff 100644 --- a/hw/xilinx_ethlite.c +++ b/hw/xilinx_ethlite.c @@ -216,7 +216,8 @@ static int xilinx_ethlite_init(SysBusDevice *dev) sysbus_init_irq(dev, &s->irq); s->rxbuf = 0; - memory_region_init_io(&s->mmio, ð_ops, s, "xilinx-ethlite", R_MAX * 4); + memory_region_init_io(&s->mmio, ð_ops, s, "xlnx.xps-ethernetlite", + R_MAX * 4); sysbus_init_mmio(dev, &s->mmio); qemu_macaddr_default_if_unset(&s->conf.macaddr); @@ -227,8 +228,8 @@ static int xilinx_ethlite_init(SysBusDevice *dev) } static Property xilinx_ethlite_properties[] = { - DEFINE_PROP_UINT32("txpingpong", struct xlx_ethlite, c_tx_pingpong, 1), - DEFINE_PROP_UINT32("rxpingpong", struct xlx_ethlite, c_rx_pingpong, 1), + DEFINE_PROP_UINT32("tx-ping-pong", struct xlx_ethlite, c_tx_pingpong, 1), + DEFINE_PROP_UINT32("rx-ping-pong", struct xlx_ethlite, c_rx_pingpong, 1), DEFINE_NIC_PROPERTIES(struct xlx_ethlite, conf), DEFINE_PROP_END_OF_LIST(), }; @@ -243,7 +244,7 @@ static void xilinx_ethlite_class_init(ObjectClass *klass, void *data) } static TypeInfo xilinx_ethlite_info = { - .name = "xilinx,ethlite", + .name = "xlnx.xps-ethernetlite", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(struct xlx_ethlite), .class_init = xilinx_ethlite_class_init, diff --git a/hw/xilinx_intc.c b/hw/xilinx_intc.c index 553f8488f6..386fd30743 100644 --- a/hw/xilinx_intc.c +++ b/hw/xilinx_intc.c @@ -156,7 +156,7 @@ static int xilinx_intc_init(SysBusDevice *dev) qdev_init_gpio_in(&dev->qdev, irq_handler, 32); sysbus_init_irq(dev, &p->parent_irq); - memory_region_init_io(&p->mmio, &pic_ops, p, "xilinx-pic", R_MAX * 4); + memory_region_init_io(&p->mmio, &pic_ops, p, "xlnx.xps-intc", R_MAX * 4); sysbus_init_mmio(dev, &p->mmio); return 0; } @@ -176,7 +176,7 @@ static void xilinx_intc_class_init(ObjectClass *klass, void *data) } static TypeInfo xilinx_intc_info = { - .name = "xilinx,intc", + .name = "xlnx.xps-intc", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(struct xlx_pic), .class_init = xilinx_intc_class_init, diff --git a/hw/xilinx_timer.c b/hw/xilinx_timer.c index 3ab2f2bb03..0683ce1ecf 100644 --- a/hw/xilinx_timer.c +++ b/hw/xilinx_timer.c @@ -62,11 +62,16 @@ struct timerblock SysBusDevice busdev; MemoryRegion mmio; qemu_irq irq; - uint32_t nr_timers; + uint8_t one_timer_only; uint32_t freq_hz; struct xlx_timer *timers; }; +static inline unsigned int num_timers(struct timerblock *t) +{ + return 2 - t->one_timer_only; +} + static inline unsigned int timer_from_addr(target_phys_addr_t addr) { /* Timers get a 4x32bit control reg area each. */ @@ -78,7 +83,7 @@ static void timer_update_irq(struct timerblock *t) unsigned int i, irq = 0; uint32_t csr; - for (i = 0; i < t->nr_timers; i++) { + for (i = 0; i < num_timers(t); i++) { csr = t->timers[i].regs[R_TCSR]; irq |= (csr & TCSR_TINT) && (csr & TCSR_ENIT); } @@ -202,8 +207,8 @@ static int xilinx_timer_init(SysBusDevice *dev) sysbus_init_irq(dev, &t->irq); /* Init all the ptimers. */ - t->timers = g_malloc0(sizeof t->timers[0] * t->nr_timers); - for (i = 0; i < t->nr_timers; i++) { + t->timers = g_malloc0(sizeof t->timers[0] * num_timers(t)); + for (i = 0; i < num_timers(t); i++) { struct xlx_timer *xt = &t->timers[i]; xt->parent = t; @@ -213,15 +218,15 @@ static int xilinx_timer_init(SysBusDevice *dev) ptimer_set_freq(xt->ptimer, t->freq_hz); } - memory_region_init_io(&t->mmio, &timer_ops, t, "xilinx-timer", - R_MAX * 4 * t->nr_timers); + memory_region_init_io(&t->mmio, &timer_ops, t, "xlnx,xps-timer", + R_MAX * 4 * num_timers(t)); sysbus_init_mmio(dev, &t->mmio); return 0; } static Property xilinx_timer_properties[] = { - DEFINE_PROP_UINT32("frequency", struct timerblock, freq_hz, 0), - DEFINE_PROP_UINT32("nr-timers", struct timerblock, nr_timers, 0), + DEFINE_PROP_UINT32("frequency", struct timerblock, freq_hz, 62 * 1000000), + DEFINE_PROP_UINT8("one-timer-only", struct timerblock, one_timer_only, 0), DEFINE_PROP_END_OF_LIST(), }; @@ -235,7 +240,7 @@ static void xilinx_timer_class_init(ObjectClass *klass, void *data) } static TypeInfo xilinx_timer_info = { - .name = "xilinx,timer", + .name = "xlnx,xps-timer", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(struct timerblock), .class_init = xilinx_timer_class_init, diff --git a/hw/xilinx_uartlite.c b/hw/xilinx_uartlite.c index aa0170db49..d0f32db2c6 100644 --- a/hw/xilinx_uartlite.c +++ b/hw/xilinx_uartlite.c @@ -202,7 +202,8 @@ static int xilinx_uartlite_init(SysBusDevice *dev) sysbus_init_irq(dev, &s->irq); uart_update_status(s); - memory_region_init_io(&s->mmio, &uart_ops, s, "xilinx-uartlite", R_MAX * 4); + memory_region_init_io(&s->mmio, &uart_ops, s, "xlnx.xps-uartlite", + R_MAX * 4); sysbus_init_mmio(dev, &s->mmio); s->chr = qemu_char_get_next_serial(); @@ -219,7 +220,7 @@ static void xilinx_uartlite_class_init(ObjectClass *klass, void *data) } static TypeInfo xilinx_uartlite_info = { - .name = "xilinx,uartlite", + .name = "xlnx.xps-uartlite", .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof (struct xlx_uartlite), .class_init = xilinx_uartlite_class_init, diff --git a/qemu-log.h b/qemu-log.h index fccfb1100e..a9b3ca4e0b 100644 --- a/qemu-log.h +++ b/qemu-log.h @@ -50,6 +50,7 @@ extern int loglevel; /* Special cases: */ +#ifdef NEED_CPU_H /* cpu_dump_state() logging functions: */ #define log_cpu_state(env, f) cpu_dump_state((env), logfile, fprintf, (f)); #define log_cpu_state_mask(b, env, f) do { \ @@ -64,6 +65,7 @@ extern int loglevel; /* page_dump() output to the log file: */ #define log_page_dump() page_dump(logfile) +#endif diff --git a/target-cris/cpu.h b/target-cris/cpu.h index a7603678fc..4f4df6d9b5 100644 --- a/target-cris/cpu.h +++ b/target-cris/cpu.h @@ -64,17 +64,19 @@ #define PR_NRP 12 #define PR_CCS 13 #define PR_USP 14 +#define PRV10_BRP 14 #define PR_SPC 15 /* CPU flags. */ #define Q_FLAG 0x80000000 -#define M_FLAG 0x40000000 +#define M_FLAG_V32 0x40000000 #define PFIX_FLAG 0x800 /* CRISv10 Only. */ #define F_FLAG_V10 0x400 #define P_FLAG_V10 0x200 #define S_FLAG 0x200 #define R_FLAG 0x100 #define P_FLAG 0x80 +#define M_FLAG_V10 0x80 #define U_FLAG 0x40 #define I_FLAG 0x20 #define X_FLAG 0x10 diff --git a/target-cris/helper.c b/target-cris/helper.c index 8680f436a0..bfbc29ec6a 100644 --- a/target-cris/helper.c +++ b/target-cris/helper.c @@ -121,14 +121,14 @@ static void do_interruptv10(CPUCRISState *env) /* These exceptions are genereated by the core itself. ERP should point to the insn following the brk. */ ex_vec = env->trap_vector; - env->pregs[PR_ERP] = env->pc; + env->pregs[PRV10_BRP] = env->pc; break; case EXCP_NMI: /* NMI is hardwired to vector zero. */ ex_vec = 0; - env->pregs[PR_CCS] &= ~M_FLAG; - env->pregs[PR_NRP] = env->pc; + env->pregs[PR_CCS] &= ~M_FLAG_V10; + env->pregs[PRV10_BRP] = env->pc; break; case EXCP_BUSFAULT: @@ -185,7 +185,7 @@ void do_interrupt(CPUCRISState *env) case EXCP_NMI: /* NMI is hardwired to vector zero. */ ex_vec = 0; - env->pregs[PR_CCS] &= ~M_FLAG; + env->pregs[PR_CCS] &= ~M_FLAG_V32; env->pregs[PR_NRP] = env->pc; break; diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c index b92c106e10..ac7c98c8ed 100644 --- a/target-cris/op_helper.c +++ b/target-cris/op_helper.c @@ -247,8 +247,8 @@ void helper_rfn(void) if (!rflag) env->pregs[PR_CCS] |= P_FLAG; - /* Always set the M flag. */ - env->pregs[PR_CCS] |= M_FLAG; + /* Always set the M flag. */ + env->pregs[PR_CCS] |= M_FLAG_V32; } uint32_t helper_lz(uint32_t t0) diff --git a/target-cris/translate_v10.c b/target-cris/translate_v10.c index 4ada3ed09f..3629629d9d 100644 --- a/target-cris/translate_v10.c +++ b/target-cris/translate_v10.c @@ -1132,6 +1132,7 @@ static unsigned int dec10_ind(DisasContext *dc) LOG_DIS("break %d\n", dc->src); cris_evaluate_flags(dc); tcg_gen_movi_tl(env_pc, dc->pc + 2); + t_gen_mov_env_TN(trap_vector, tcg_const_tl(dc->src + 2)); t_gen_raise_exception(EXCP_BREAK); dc->is_jmp = DISAS_UPDATE; return insn_len; |