* [Qemu-devel] [PATCH 32/34] hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register
2011-06-14 11:05 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
@ 2011-06-14 11:05 ` Gerd Hoffmann
2011-06-14 11:05 ` [Qemu-devel] [PATCH 33/34] hw/usb-ohci.c: Implement remote wakeup Gerd Hoffmann
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Gerd Hoffmann @ 2011-06-14 11:05 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Gerd Hoffmann
From: Peter Maydell <peter.maydell@linaro.org>
HcPeriodCurrentED is read-only, but Linux writes to it anyway; silently
ignore this rather than printing a warning message.
(Specifically, drivers/usb/host/ohci-hub.c:ohci_rh_resume() writes a
0, in at least kernels 2.6.25 through 2.6.39.)
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ohci.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 401045a..ab77434 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1575,6 +1575,10 @@ static void ohci_mem_write(void *ptr, target_phys_addr_t addr, uint32_t val)
ohci->hcca = val & OHCI_HCCA_MASK;
break;
+ case 7: /* HcPeriodCurrentED */
+ /* Ignore writes to this read-only register, Linux does them */
+ break;
+
case 8: /* HcControlHeadED */
ohci->ctrl_head = val & OHCI_EDPTR_MASK;
break;
--
1.7.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 33/34] hw/usb-ohci.c: Implement remote wakeup
2011-06-14 11:05 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-06-14 11:05 ` [Qemu-devel] [PATCH 32/34] hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register Gerd Hoffmann
@ 2011-06-14 11:05 ` Gerd Hoffmann
2011-06-15 15:03 ` Peter Maydell
2011-06-14 11:05 ` [Qemu-devel] [PATCH 34/34] usb-uhci: fix expire time initialization Gerd Hoffmann
2011-06-15 14:17 ` [Qemu-devel] [PULL] usb patch queue Anthony Liguori
3 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2011-06-14 11:05 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Gerd Hoffmann
From: Peter Maydell <peter.maydell@linaro.org>
Implement the wakeup callback in the OHCI USBPortOps, so that when
a downstream device wakes up it correctly causes the OHCI controller
to come out of suspend.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-ohci.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index ab77434..832dcd6 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -367,6 +367,22 @@ static void ohci_detach(USBPort *port1)
ohci_set_interrupt(s, OHCI_INTR_RHSC);
}
+static void ohci_wakeup(USBDevice *dev)
+{
+ USBBus *bus = usb_bus_from_device(dev);
+ OHCIState *s = container_of(bus, OHCIState, bus);
+ int portnum = dev->port->index;
+ OHCIPort *port = &s->rhport[portnum];
+ if (port->ctrl & OHCI_PORT_PSS) {
+ DPRINTF("usb-ohci: port %d: wakeup\n", portnum);
+ port->ctrl |= OHCI_PORT_PSSC;
+ port->ctrl &= ~OHCI_PORT_PSS;
+ if ((s->ctl & OHCI_CTL_HCFS) == OHCI_USB_SUSPEND) {
+ ohci_set_interrupt(s, OHCI_INTR_RD);
+ }
+ }
+}
+
/* Reset the controller */
static void ohci_reset(void *opaque)
{
@@ -1675,6 +1691,7 @@ static CPUWriteMemoryFunc * const ohci_writefn[3]={
static USBPortOps ohci_port_ops = {
.attach = ohci_attach,
.detach = ohci_detach,
+ .wakeup = ohci_wakeup,
.complete = ohci_async_complete_packet,
};
--
1.7.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 33/34] hw/usb-ohci.c: Implement remote wakeup
2011-06-14 11:05 ` [Qemu-devel] [PATCH 33/34] hw/usb-ohci.c: Implement remote wakeup Gerd Hoffmann
@ 2011-06-15 15:03 ` Peter Maydell
0 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2011-06-15 15:03 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 14 June 2011 12:05, Gerd Hoffmann <kraxel@redhat.com> wrote:
> From: Peter Maydell <peter.maydell@linaro.org>
>
> Implement the wakeup callback in the OHCI USBPortOps, so that when
> a downstream device wakes up it correctly causes the OHCI controller
> to come out of suspend.
Just to let you know, this patch turns out to not be quite right:
* if the port is suspended and the controller is not, we need to
raise OHCI_INTR_RHSC
* if the controller is suspended we need to put it into the
resume state
* the controller can be suspended when the port is not, so the
check on s->ctl musn't be inside the port->ctrl if().
Sorry for the half-baked patch. I'll send a fixed version shortly.
-- PMM
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 34/34] usb-uhci: fix expire time initialization.
2011-06-14 11:05 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
2011-06-14 11:05 ` [Qemu-devel] [PATCH 32/34] hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register Gerd Hoffmann
2011-06-14 11:05 ` [Qemu-devel] [PATCH 33/34] hw/usb-ohci.c: Implement remote wakeup Gerd Hoffmann
@ 2011-06-14 11:05 ` Gerd Hoffmann
2011-06-15 14:17 ` [Qemu-devel] [PULL] usb patch queue Anthony Liguori
3 siblings, 0 replies; 6+ messages in thread
From: Gerd Hoffmann @ 2011-06-14 11:05 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
expire_time must be initialited when the guest activates the
usb scheduler, not at device creation time.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb-uhci.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 1503373..75cd231 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -424,6 +424,8 @@ static void uhci_ioport_writew(void *opaque, uint32_t addr, uint32_t val)
case 0x00:
if ((val & UHCI_CMD_RS) && !(s->cmd & UHCI_CMD_RS)) {
/* start frame processing */
+ s->expire_time = qemu_get_clock_ns(vm_clock) +
+ (get_ticks_per_sec() / FRAME_TIMER_FREQ);
qemu_mod_timer(s->frame_timer, qemu_get_clock_ns(vm_clock));
s->status &= ~UHCI_STS_HCHALTED;
} else if (!(val & UHCI_CMD_RS)) {
@@ -1131,8 +1133,6 @@ static int usb_uhci_common_initfn(UHCIState *s)
usb_port_location(&s->ports[i].port, NULL, i+1);
}
s->frame_timer = qemu_new_timer_ns(vm_clock, uhci_frame_timer, s);
- s->expire_time = qemu_get_clock_ns(vm_clock) +
- (get_ticks_per_sec() / FRAME_TIMER_FREQ);
s->num_ports_vmstate = NB_PORTS;
QTAILQ_INIT(&s->async_pending);
--
1.7.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PULL] usb patch queue
2011-06-14 11:05 [Qemu-devel] [PULL] usb patch queue Gerd Hoffmann
` (2 preceding siblings ...)
2011-06-14 11:05 ` [Qemu-devel] [PATCH 34/34] usb-uhci: fix expire time initialization Gerd Hoffmann
@ 2011-06-15 14:17 ` Anthony Liguori
3 siblings, 0 replies; 6+ messages in thread
From: Anthony Liguori @ 2011-06-15 14:17 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
On 06/14/2011 06:05 AM, Gerd Hoffmann wrote:
> Hi,
>
> The USB patch queue has been rebased, got a minor fix (wrong comment in
> patch #8, spotted by David Ahern) and three new patches. I'm just
> posting the three new patches to avoid spamming the list with 30
> identical patches ...
>
> please pull,
> Gerd
Pulled. Thanks.
Regards,
Anthony Liguori
>
> The following changes since commit 0b862cedf36d927818c50584ddd611b0370673df:
>
> configure: Detect and don't try to use older libcurl (2011-06-13 21:16:27 +0200)
>
> are available in the git repository at:
> git://git.kraxel.org/qemu usb.16
>
> Brad Hards (3):
> usb: Add defines for USB Serial Bus Release Number register
> usb: Use defines for serial bus release number register for UHCI
> usb: Use defines for serial bus release number register for EHCI
>
> Gerd Hoffmann (18):
> usb-linux: catch ENODEV in more places.
> usb-ehci: trace mmio and usbsts
> usb-ehci: trace state machine changes
> usb-ehci: trace port state
> usb-ehci: improve mmio tracing
> usb-ehci: trace buffer copy
> usb-ehci: add queue data struct
> usb-ehci: multiqueue support
> usb-ehci: fix offset writeback in ehci_buffer_rw
> usb-ehci: fix error handling.
> usb: cancel async packets on unplug
> usb-ehci: drop EXECUTING checks.
> usb-ehci: itd handling fixes.
> usb-ehci: split trace calls to handle arg count limits
> usb: documentation update
> usb-linux: only cleanup in host_close when host_open was successful.
> usb: don't call usb_host_device_open from vl.c
> usb-uhci: fix expire time initialization.
>
> Hans de Goede (9):
> ehci: fix a number of unused-but-set-variable warnings (new with gcc-4.6)
> usb-linux: Get speed from sysfs rather then from the connectinfo ioctl
> usb-linux: Teach about super speed
> usb-linux: Don't do perror when errno is not set
> usb-linux: Ensure devep != 0
> usb-linux: Don't try to open the same device twice
> usb-linux: Enlarge buffer for descriptors to 8192 bytes
> usb-bus: Add knowledge of USB_SPEED_SUPER to usb_speed helper
> usb-bus: Don't detach non attached devices on device exit
>
> Kevin O'Connor (2):
> Fix USB mouse Set_Protocol behavior
> The USB tablet should not claim boot protocol support.
>
> Peter Maydell (2):
> hw/usb-ohci.c: Ignore writes to HcPeriodCurrentED register
> hw/usb-ohci.c: Implement remote wakeup
>
> docs/usb2.txt | 85 ++++
> hw/milkymist-softusb.c | 10 +-
> hw/usb-bus.c | 10 +-
> hw/usb-ehci.c | 1198 ++++++++++++++++++++++++++++--------------------
> hw/usb-hid.c | 5 +-
> hw/usb-musb.c | 23 +-
> hw/usb-ohci.c | 37 ++-
> hw/usb-uhci.c | 32 ++-
> hw/usb.h | 14 +-
> trace-events | 20 +
> usb-linux.c | 96 +++--
> vl.c | 6 +-
> 12 files changed, 990 insertions(+), 546 deletions(-)
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread