[U-Boot] [PATCH] ohci: Add missing cache-flush for hcca area

We need to cache-flush the hcca area after the initial memset, otherwise on the first hc_interrupt we might see an old $random value as done_head and try to interpret that as the address for a completed td (followed by chaos).
Signed-off-by: Hans de Goede hdegoede@redhat.com --- drivers/usb/host/ohci-hcd.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 9bde2b2..ccbfc02 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -2205,6 +2205,7 @@ int ohci_register(struct udevice *dev, struct ohci_regs *regs) if (!ohci->hcca) return -ENOMEM; memset(ohci->hcca, 0, sizeof(struct ohci_hcca)); + flush_dcache_hcca(ohci->hcca);
if (hc_reset(ohci) < 0) return -EIO;

On Tuesday, October 20, 2015 at 06:39:29 PM, Hans de Goede wrote:
We need to cache-flush the hcca area after the initial memset, otherwise on the first hc_interrupt we might see an old $random value as done_head and try to interpret that as the address for a completed td (followed by chaos).
Signed-off-by: Hans de Goede hdegoede@redhat.com
Dang, this came three hours after the release of 2015.10 ;-)
Oh well. Applied, thanks!
drivers/usb/host/ohci-hcd.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 9bde2b2..ccbfc02 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -2205,6 +2205,7 @@ int ohci_register(struct udevice *dev, struct ohci_regs *regs) if (!ohci->hcca) return -ENOMEM; memset(ohci->hcca, 0, sizeof(struct ohci_hcca));
flush_dcache_hcca(ohci->hcca);
if (hc_reset(ohci) < 0) return -EIO;
Best regards, Marek Vasut
participants (2)
-
Hans de Goede
-
Marek Vasut