grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fwd: [Resolved] Grub2 can not detect usb disk]


From: Aleš Nesrsta
Subject: [Fwd: [Resolved] Grub2 can not detect usb disk]
Date: Sat, 20 Aug 2011 23:45:41 +0200

Hi everybody,

could anybody test changes from Cui Lei (see below) in uhci.c - if they
are generally working and does not have some negative effect on machines
with "normal" BIOS etc. ?

Maybe such changes are related only to coreboot and some special use
case/platform, but probably they are related to needed change of UHCI
controller ownership and should be included into uhci.c code.

Regards,
Ales

-------- Přeposlaná zpráva --------
Od: Cui Lei <address@hidden>
Komu: Aleš Nesrsta <address@hidden>
Kopie: The development of GNU GRUB <address@hidden>
Předmět: [Resolved] Grub2 can not detect usb disk
Datum: Fri, 19 Aug 2011 10:58:00 +0800

Thank you for your help, very much! ^_^
This problem have been resolved and I can usb the usb_keyborard under 
grub-shell and I can boot ubuntu11.04 from usb disk.
My mainboard is via 8595a, the usb controller is uhci.
I resolved it by add these code in the grub-core/bus/usb/uhci.c:

(1)
182   /*Set bus master*/
183   addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
184   grub_uint16_t val = grub_pci_read_word(addr);
185   val = (val & ~0) | GRUB_PCI_COMMAND_BUS_MASTER;
186   grub_pci_write_word(addr, val);

(2)
203   // Reset PIRQ and SMI
204   addr = grub_pci_make_address (dev, 0xC0);       
//USBLEGSUP               0xc0
205   grub_pci_write_word(addr, 0x8f00);      //USBLEGSUP_RWC       
0x8f00  /* the R/WC bits */
206   // Reset the HC
207   grub_uhci_writereg16(u, GRUB_UHCI_REG_USBCMD, 0x0002); 
//USBCMD_HCRESET  0x0002
208   grub_millisleep(5);
209   // Disable interrupts and commands (just to be safe).
210   grub_outw (0, u->iobase + 4);       //USBINTR  4  /*Interrupt 
enable register*/
211   grub_uhci_writereg16 (u, GRUB_UHCI_REG_USBCMD, 0);

I don't know whether it is useful to the other one, but may be a reference.

BRs,

Rock.

> Hi,
>
> I am afraid, I maybe will not help You too much but I try it:
>
> I shortly looked into ML to Your posts. As I saw short part of debug
> output in one of Your e-mail, GRUB freezes when it wants to get device
> descriptor - more precisely, when it requests first 8 bytes of device
> descriptor. It is the first thing which is done after address is
> assigned to the device.
>
> So, it looks like device does not set address properly (even if control
> message Set Address returns success) or happened something else what
> prevent device to respond (but I don't know what...).
>
> For the first try You can increase related delays in usbhub.c:
>
> ...
>    /* Wait "recovery interval", spec. says 2ms */
>    grub_millisleep (2);<<<<---- HERE (try 4ms or more)
>
>    grub_usb_device_attach (dev);
> ...
>
> ...
>    /* Enable the port.  */
>    err = hub->controller->dev->portstatus (hub->controller, portno, 1);
>    if (err)
>      return;
>    hub->controller->dev->pending_reset = grub_get_time_ms () + 5000;
>
>    grub_millisleep (10);<<<<---- maybe here also
>
>    /* Enable the port and create a device.  */
>    dev = grub_usb_hub_add_dev (hub->controller, speed, portno, 0);
>    hub->controller->dev->pending_reset = 0;
>    if (! dev)
>      return;
> ...
>
> If this will not help You, I currently have no other idea what could be
> the reason of timeout.
> I think You don't need EHCI because it looks like Set Address control
> message works (at least it does not return error), i.e. You probably
> have OHCI or UHCI USB (companion) controller on computer and Your device
> is working at full or low speed with Your USB controller.
>
> By the way, for the first look into ML I did not find which USB
> controller You have - OHCI/UHCI ? (which driver/module are You using -
> ohci/uhci?) - and which machine/architecture is the computer You are
> trying to boot with GRUB2 - ?
> I sometimes had some unidentified problems on my UHCI/EHCI controller,
> mostly with port powering - UHCI does not have power management but EHCI
> does and if EHCI is not properly initialized by BIOS (it could be Your
> case with coreboot, maybe ?) then USB ports are not properly powered.
> Another BIOS (coreboot?) issue could be improper handling of USB
> controller ownership.
>
> Do You have USB device connected directly into root port or via some USB
> hub ? Try to do it in opposite way (i.e. if You are not using the USB
> hub, try use it and connect USB device via hub - maybe it helps...)
>
> Hmmm, I remember now one issue which could be related to Your problem.
> On my very old machine with OHCI USB controller some devices are not
> working "for the first time". I am still not able to debug why it
> happened (it does not happened when full debug is active - so it looks
> like it is related to some timing). But I am afraid it will be not Your
> case because device stops working after it is recognized, configured,
> usbms module loaded and GRUB USB device usb0 created.
> But - try load ohci/uhci module when USB disk is connected and then
> disconnect and connect it again after few seconds. In my case device
> becomes working as new usb device (i.e. usb1).
>
> Additionally, lot of manufacturers does not follow USB or USBMS
> specifications, as You can read in Linux source code of USB controllers
> and USB mass storage devices and related documentation.
> Did You tried more different USB mass storage devices ?
> What is manufacturer&  type of Your USB mass storage device ?
>
> Of course, You can also try EHCI driver, it maybe can solve Your problem
> because of little bit different ports/devices handling. But EHCI driver
> is currently highly experimental, it still exists only as uncorrected
> and not accepted "patch". I have to do some improvement but I don't have
> sufficient time still, unfortunately...
> If You want try to use it, You can get my patch from ML (sent at
> 25.6.2011) and use it with related source code trunk branch revision
> (maybe also any later or current revision, because USB parts of GRUB are
> not frequently changed). Please also read about know issue and another
> limitations of the "zero version" of EHCI driver - e.g. it may not work
> if Your PC is not x86 machine or USB registers are mapped above 4GB etc.
>
> Sorry if You will wait longer time for my response in future - I don't
> check the post so often and additionally currently I am (and probably
> will be) longer time too busy - I am not regular GRUB2 contributor, I do
> something for GRUB2 USB part only time to time...
>
> BRs,
> Ales
>
>
> Cui Lei píše v Út 09. 08. 2011 v 11:05 +0800:
>> Hi Aleš,
>> I am trying to boot OS from USB  disk, I use coreboot-v4 with grub2 as
>> payload, but my usb disk can not been
>> detect. I try to use usb-keyboard, it is not working.  I know you are
>> working on the EHCI driver from Vladimir ,
>> could you give me some advices? Vladimir said it may need EHCI driver,
>> but I think the usb device should run
>> with low-speed or full-speed if no EHCI driver.C
>>
>> Looking forward to your reply.
>> BRs,
>> Rock Cui.
>>
>>
>








reply via email to

[Prev in Thread] Current Thread [Next in Thread]