[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: EHCI driver
From: |
Aleš Nesrsta |
Subject: |
Re: EHCI driver |
Date: |
Sun, 22 Jul 2012 21:24:16 +0200 |
Vladimir 'φ-coder/phcoder' Serbinenko wrote:
> On 18.07.2012 17:32, Aleš Nesrsta wrote:
>
> > Hi Frank,
> >
> > You are probably right - it might be the problem with PCI bus master
> > settings! The same problem was solved in UHCI driver for coreboot by
> > Rock some time ago.
> >
> > Try this patch, please:
> >
>
> Feel free to commit this patch (especially given the confirmation that
> it works). My response time nowadays is long, feel free to commit USB
> patches as you see fit.
Hi Vladimir,
I commited two simple USB patches as trunk revision 4559 (see below).
The first one is the same patch of EHCI which was tested by Frank (and
also by me - in little bit another version of VMware).
The second one is in fact the same correction but in OHCI driver - I
expect there the same problem even nobody reported it yet (probably OHCI
is not so wide used as UHCI/EHCI and nobody tried OHCI with coreboot
yet...).
BR,
Ales
Commited patches:
diff
-purB ./grub/grub-core/bus/usb/ehci.c ./grub_patched/grub-core/bus/usb/ehci.c
--- ./grub/grub-core/bus/usb/ehci.c 2012-07-19 23:05:24.993766000 +0200
+++ ./grub_patched/grub-core/bus/usb/ehci.c 2012-07-19
22:22:48.245011460 +0200
@@ -533,6 +533,11 @@ grub_ehci_pci_iter (grub_pci_device_t de
"EHCI grub_ehci_pci_iter: registers above 4G are not
supported\n");
return 0;
}
+
+ /* Set bus master - needed for coreboot, VMware, broken BIOSes
etc. */
+ addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
+ grub_pci_write_word(addr,
+ GRUB_PCI_COMMAND_BUS_MASTER | grub_pci_read_word(addr));
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK
\n");
}
diff
-purB ./grub/grub-core/bus/usb/ohci.c ./grub_patched/grub-core/bus/usb/ohci.c
--- ./grub/grub-core/bus/usb/ohci.c 2012-07-19 23:05:24.993766000 +0200
+++ ./grub_patched/grub-core/bus/usb/ohci.c 2012-07-19
22:22:48.269010600 +0200
@@ -270,6 +270,11 @@ grub_ohci_pci_iter (grub_pci_device_t de
return 0;
#endif
+ /* Set bus master - needed for coreboot, VMware, broken BIOSes
etc. */
+ addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
+ grub_pci_write_word(addr,
+ GRUB_PCI_COMMAND_BUS_MASTER | grub_pci_read_word(addr));
+
grub_dprintf ("ohci", "class=0x%02x 0x%02x interface 0x%02x\n",
class, subclass, interf);
}