Commit 0e162974 authored by Andreas Färber's avatar Andreas Färber Committed by Peter Maydell
Browse files

libqos: Fix PC PCI endianness glitches



The libqos implementation of io_read{b,w,l} and io_write{b,w,l} hooks
was relying on qtest_mem{read,write}() respectively. With d81d4106 (usb:
improve ehci/uhci test) this resulted in assertion failures on ppc hosts:

 ERROR:tests/usb-hcd-ehci-test.c:78:ehci_port_test: assertion failed: ((value & mask) == (expect & mask))

 ERROR:tests/usb-hcd-ehci-test.c:128:pci_uhci_port_2: assertion failed: (pcibus != NULL)

 ERROR:tests/usb-hcd-ehci-test.c:150:pci_ehci_port_2: assertion failed: (pcibus != NULL)

qtest_read{b,w,l,q}() and qtest_write{b,w,l,q}() had been introduced
as endian-safe replacement for qtest_mem{read,write}() in I2C in
872536bf (qtest: Add MMIO support). Use them for PCI as well.

Cc: Anthony Liguori <aliguori@amazon.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Fixes: c4efe1ca qtest: add libqos including PCI support
Fixes: d81d4106 usb: improve ehci/uhci test
Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 0a9934ee
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ static uint8_t qpci_pc_io_readb(QPCIBus *bus, void *addr)
    if (port < 0x10000) {
        value = inb(port);
    } else {
        memread(port, &value, sizeof(value));
        value = readb(port);
    }

    return value;
@@ -55,7 +55,7 @@ static uint16_t qpci_pc_io_readw(QPCIBus *bus, void *addr)
    if (port < 0x10000) {
        value = inw(port);
    } else {
        memread(port, &value, sizeof(value));
        value = readw(port);
    }

    return value;
@@ -69,7 +69,7 @@ static uint32_t qpci_pc_io_readl(QPCIBus *bus, void *addr)
    if (port < 0x10000) {
        value = inl(port);
    } else {
        memread(port, &value, sizeof(value));
        value = readl(port);
    }

    return value;
@@ -82,7 +82,7 @@ static void qpci_pc_io_writeb(QPCIBus *bus, void *addr, uint8_t value)
    if (port < 0x10000) {
        outb(port, value);
    } else {
        memwrite(port, &value, sizeof(value));
        writeb(port, value);
    }
}

@@ -93,7 +93,7 @@ static void qpci_pc_io_writew(QPCIBus *bus, void *addr, uint16_t value)
    if (port < 0x10000) {
        outw(port, value);
    } else {
        memwrite(port, &value, sizeof(value));
        writew(port, value);
    }
}

@@ -104,7 +104,7 @@ static void qpci_pc_io_writel(QPCIBus *bus, void *addr, uint32_t value)
    if (port < 0x10000) {
        outl(port, value);
    } else {
        memwrite(port, &value, sizeof(value));
        writel(port, value);
    }
}