- Fix and re-enable the usb-hcd-ehci-test
- Silence a Coverity warning in hw/m68k/next-cube.c - Fix crash that can occur when using bad binaries with "-kernel" - Disallow colons in the "-accel" parameter -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAl2TJGERHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbWuvg//cxdPsYPv5R8Lph4ZUE4Yo50QM+x/4udh EgjrpGspvRaA0o8yUHTWQHcQYDMRhCqKn1kKOVuRik8zXQC2oHGLGerm2zKUTkIq er5LWmeHomfjnOzChJk1OlHTOiySx/I2q1y76Aa7YHBp+HTbkvgrY5USPig3h+CL OxD3UYHMoUaEB9WeBUnPYIf6DDPp7W+qrgfmhDP+X+8+c7v6+U2uXP1ina1JKOYQ 28w4t4se3pPlCuzpPG6FkQJ3xPpEPABVcLfhkDY+bcVsVpHGxK9+Bji89Qux1gYK 0umdDCQ6EFto6X3BCV8x51+q0sjZ0NJQopsB1LEfF6zYWw+VJuZ2R/xsQ7bw/0BH VlX+CRsBkUONHzaZoUdEbtXRE2CWrUVxCjaAUZiMf6Cy/bwptkcdibMdUbpkX94i E7XGVZyKB+3blYv6XM4fD3tfcBI7fsTFoTgL6EThu8TwFujZS/1W/VL+DlVcfWmo Y5vo/uZMsxhnsiXTpRGJhEf0+AoBtlwEqS3kQ/KmRtRttOTnnGtQdu7SSEsqCEju VqJHRdUZbApmpHnXZP0nauXziMdom9f8jqspneb2S6IZKFLvDVeZilzoq1a99iXP Jie6jueQpOxHJgVUTZ9904sSsE/YoUe9Inv+hc2GVdrTVFkVIJDv1jaZg3euA625 Idzul0nSn2U= =/g3G -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-10-01' into staging - Fix and re-enable the usb-hcd-ehci-test - Silence a Coverity warning in hw/m68k/next-cube.c - Fix crash that can occur when using bad binaries with "-kernel" - Disallow colons in the "-accel" parameter # gpg: Signature made Tue 01 Oct 2019 11:03:13 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # 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>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/huth-gitlab/tags/pull-request-2019-10-01: Disallow colons in the parameter of "-accel" hw/core/loader: Fix possible crash in rom_copy() hw/m68k/next-cube: Avoid static RTC variables and introduce control register tests: fix echi/ehci typo tests: fix usb-hcd-ehci-test compilation Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
7f21573c82
@ -1281,7 +1281,7 @@ int rom_copy(uint8_t *dest, hwaddr addr, size_t size)
|
||||
if (rom->addr + rom->romsize < addr) {
|
||||
continue;
|
||||
}
|
||||
if (rom->addr > end) {
|
||||
if (rom->addr > end || rom->addr < addr) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,15 @@ typedef struct next_dma {
|
||||
uint32_t size;
|
||||
} next_dma;
|
||||
|
||||
typedef struct NextRtc {
|
||||
uint8_t ram[32];
|
||||
uint8_t command;
|
||||
uint8_t value;
|
||||
uint8_t status;
|
||||
uint8_t control;
|
||||
uint8_t retval;
|
||||
} NextRtc;
|
||||
|
||||
typedef struct {
|
||||
MachineState parent;
|
||||
|
||||
@ -77,7 +86,7 @@ typedef struct {
|
||||
uint32_t scr1;
|
||||
uint32_t scr2;
|
||||
|
||||
uint8_t rtc_ram[32];
|
||||
NextRtc rtc;
|
||||
} NeXTState;
|
||||
|
||||
/* Thanks to NeXT forums for this */
|
||||
@ -105,11 +114,8 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size)
|
||||
static int led;
|
||||
static int phase;
|
||||
static uint8_t old_scr2;
|
||||
static uint8_t rtc_command;
|
||||
static uint8_t rtc_value;
|
||||
static uint8_t rtc_status = 0x90;
|
||||
static uint8_t rtc_return;
|
||||
uint8_t scr2_2;
|
||||
NextRtc *rtc = &s->rtc;
|
||||
|
||||
if (size == 4) {
|
||||
scr2_2 = (val >> 8) & 0xFF;
|
||||
@ -135,52 +141,52 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size)
|
||||
if (((old_scr2 & SCR2_RTCLK) != (scr2_2 & SCR2_RTCLK)) &&
|
||||
((scr2_2 & SCR2_RTCLK) == 0)) {
|
||||
if (phase < 8) {
|
||||
rtc_command = (rtc_command << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->command = (rtc->command << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
}
|
||||
if (phase >= 8 && phase < 16) {
|
||||
rtc_value = (rtc_value << 1) | ((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->value = (rtc->value << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
|
||||
/* if we read RAM register, output RT_DATA bit */
|
||||
if (rtc_command <= 0x1F) {
|
||||
if (rtc->command <= 0x1F) {
|
||||
scr2_2 = scr2_2 & (~SCR2_RTDATA);
|
||||
if (s->rtc_ram[rtc_command] & (0x80 >> (phase - 8))) {
|
||||
if (rtc->ram[rtc->command] & (0x80 >> (phase - 8))) {
|
||||
scr2_2 |= SCR2_RTDATA;
|
||||
}
|
||||
|
||||
rtc_return = (rtc_return << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->retval = (rtc->retval << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
}
|
||||
/* read the status 0x30 */
|
||||
if (rtc_command == 0x30) {
|
||||
if (rtc->command == 0x30) {
|
||||
scr2_2 = scr2_2 & (~SCR2_RTDATA);
|
||||
/* for now status = 0x98 (new rtc + FTU) */
|
||||
if (rtc_status & (0x80 >> (phase - 8))) {
|
||||
if (rtc->status & (0x80 >> (phase - 8))) {
|
||||
scr2_2 |= SCR2_RTDATA;
|
||||
}
|
||||
|
||||
rtc_return = (rtc_return << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->retval = (rtc->retval << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
}
|
||||
/* read the status 0x31 */
|
||||
if (rtc_command == 0x31) {
|
||||
if (rtc->command == 0x31) {
|
||||
scr2_2 = scr2_2 & (~SCR2_RTDATA);
|
||||
/* for now 0x00 */
|
||||
if (0x00 & (0x80 >> (phase - 8))) {
|
||||
if (rtc->control & (0x80 >> (phase - 8))) {
|
||||
scr2_2 |= SCR2_RTDATA;
|
||||
}
|
||||
rtc_return = (rtc_return << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->retval = (rtc->retval << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
}
|
||||
|
||||
if ((rtc_command >= 0x20) && (rtc_command <= 0x2F)) {
|
||||
if ((rtc->command >= 0x20) && (rtc->command <= 0x2F)) {
|
||||
scr2_2 = scr2_2 & (~SCR2_RTDATA);
|
||||
/* for now 0x00 */
|
||||
time_t time_h = time(NULL);
|
||||
struct tm *info = localtime(&time_h);
|
||||
int ret = 0;
|
||||
|
||||
switch (rtc_command) {
|
||||
switch (rtc->command) {
|
||||
case 0x20:
|
||||
ret = SCR2_TOBCD(info->tm_sec);
|
||||
break;
|
||||
@ -205,22 +211,22 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size)
|
||||
if (ret & (0x80 >> (phase - 8))) {
|
||||
scr2_2 |= SCR2_RTDATA;
|
||||
}
|
||||
rtc_return = (rtc_return << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
rtc->retval = (rtc->retval << 1) |
|
||||
((scr2_2 & SCR2_RTDATA) ? 1 : 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
phase++;
|
||||
if (phase == 16) {
|
||||
if (rtc_command >= 0x80 && rtc_command <= 0x9F) {
|
||||
s->rtc_ram[rtc_command - 0x80] = rtc_value;
|
||||
if (rtc->command >= 0x80 && rtc->command <= 0x9F) {
|
||||
rtc->ram[rtc->command - 0x80] = rtc->value;
|
||||
}
|
||||
/* write to x30 register */
|
||||
if (rtc_command == 0xB1) {
|
||||
if (rtc->command == 0xB1) {
|
||||
/* clear FTU */
|
||||
if (rtc_value & 0x04) {
|
||||
rtc_status = rtc_status & (~0x18);
|
||||
if (rtc->value & 0x04) {
|
||||
rtc->status = rtc->status & (~0x18);
|
||||
s->int_status = s->int_status & (~0x04);
|
||||
}
|
||||
}
|
||||
@ -229,8 +235,8 @@ static void nextscr2_write(NeXTState *s, uint32_t val, int size)
|
||||
} else {
|
||||
/* else end or abort */
|
||||
phase = -1;
|
||||
rtc_command = 0;
|
||||
rtc_value = 0;
|
||||
rtc->command = 0;
|
||||
rtc->value = 0;
|
||||
}
|
||||
s->scr2 = val & 0xFFFF00FF;
|
||||
s->scr2 |= scr2_2 << 8;
|
||||
@ -881,9 +887,10 @@ static void next_cube_init(MachineState *machine)
|
||||
/* 0x0000XX00 << vital bits */
|
||||
ns->scr1 = 0x00011102;
|
||||
ns->scr2 = 0x00ff0c80;
|
||||
ns->rtc.status = 0x90;
|
||||
|
||||
/* Load RTC RAM - TODO: provide possibility to load contents from file */
|
||||
memcpy(ns->rtc_ram, rtc_ram2, 32);
|
||||
memcpy(ns->rtc.ram, rtc_ram2, 32);
|
||||
|
||||
/* 64MB RAM starting at 0x04000000 */
|
||||
memory_region_allocate_system_memory(ram, NULL, "next.ram", ram_size);
|
||||
|
@ -182,9 +182,7 @@ check-qtest-i386-$(CONFIG_PVPANIC) += tests/pvpanic-test$(EXESUF)
|
||||
check-qtest-i386-$(CONFIG_I82801B11) += tests/i82801b11-test$(EXESUF)
|
||||
check-qtest-i386-$(CONFIG_IOH3420) += tests/ioh3420-test$(EXESUF)
|
||||
check-qtest-i386-$(CONFIG_USB_UHCI) += tests/usb-hcd-uhci-test$(EXESUF)
|
||||
ifeq ($(CONFIG_USB_ECHI)$(CONFIG_USB_UHCI),yy)
|
||||
check-qtest-i386-y += tests/usb-hcd-ehci-test$(EXESUF)
|
||||
endif
|
||||
check-qtest-i386-$(call land,$(CONFIG_USB_EHCI),$(CONFIG_USB_UHCI)) += tests/usb-hcd-ehci-test$(EXESUF)
|
||||
check-qtest-i386-$(CONFIG_USB_XHCI_NEC) += tests/usb-hcd-xhci-test$(EXESUF)
|
||||
check-qtest-i386-y += tests/cpu-plug-test$(EXESUF)
|
||||
check-qtest-i386-y += tests/q35-test$(EXESUF)
|
||||
|
@ -120,7 +120,7 @@ static void test_cdboot(gconstpointer data)
|
||||
{
|
||||
QTestState *qts;
|
||||
|
||||
qts = qtest_initf("-accel kvm:tcg -no-shutdown %s%s", (const char *)data,
|
||||
qts = qtest_initf("-M accel=kvm:tcg -no-shutdown %s%s", (const char *)data,
|
||||
isoimage);
|
||||
boot_sector_test(qts);
|
||||
qtest_quit(qts);
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "libqtest.h"
|
||||
#include "libqtest-single.h"
|
||||
#include "libqos/pci-pc.h"
|
||||
#include "hw/usb/uhci-regs.h"
|
||||
#include "hw/usb/ehci-regs.h"
|
||||
@ -139,7 +139,7 @@ static void pci_ehci_port_3_hotplug(void)
|
||||
|
||||
static void pci_ehci_port_hotplug(void)
|
||||
{
|
||||
usb_test_hotplug("ich9-ehci-1", "3", pci_ehci_port_3_hotplug);
|
||||
usb_test_hotplug(global_qtest, "ich9-ehci-1", "3", pci_ehci_port_3_hotplug);
|
||||
}
|
||||
|
||||
|
||||
|
5
vl.c
5
vl.c
@ -3554,6 +3554,11 @@ int main(int argc, char **argv, char **envp)
|
||||
g_slist_free(accel_list);
|
||||
exit(0);
|
||||
}
|
||||
if (optarg && strchr(optarg, ':')) {
|
||||
error_report("Don't use ':' with -accel, "
|
||||
"use -M accel=... for now instead");
|
||||
exit(1);
|
||||
}
|
||||
opts = qemu_opts_create(qemu_find_opts("machine"), NULL,
|
||||
false, &error_abort);
|
||||
qemu_opt_set(opts, "accel", optarg, &error_abort);
|
||||
|
Loading…
Reference in New Issue
Block a user