[coreboot] [LinuxBIOS] FILO with the USB

joe at smittys.pointclark.net joe at smittys.pointclark.net
Sat Mar 29 17:56:37 CET 2008


> Fridel's code, in patch form and with the non-USB bits removed.

Well,
I tested this patch and it does nothing for UHCI :-( It might work  
great for OHCI but someone else will need to test it.

> It should fall back, but not everything does that properly. Just for
> checking the basic functioning, any old USB 1.1 device (keyboard, mouse,
> hub) will do to at least see that it was recognized and configured.
>
> IIRC, the sequence is:
> 1. detect that a device is connected to the port
> 2. enable the port
> 3. Assign a USB ID with a setup packet
> 4. query for device type and strings
> 5. If a suitable block device, load the payload.
>
> 5 used to be a stream object (like in the old LinuxBIOS code) handed to
> a copy of the the ELF loader. the read method set up the request and
> called into the USB polling loop. I'm guessing that's
>
> One potential issue there is that control of the physical port between
> UHCI or OHCI (for 1.1) and EHCI (for 2.0) is determined by a bit in a
> register. I'm not sure what happens if it's set wrong, but I suspect it
> could look like your debug output.
>
> was this exact setup working before r54? One possability is that the USB
> code always had a bug that wasn't visible when allocations were quietly
> double the requested size.

So I tried a low speed device (old usb mouse) and it did something  
different, it still errored out of course (because it is not a drive)  
but I think it was working the way it is supposed to??? Anyways I also  
tried a USB 2.0 flash drive with no success. I think what is happening  
here is, it is not falling back to low speed UHCI......see  
attachment....I don't know where to go from here....

Thanks - Joe
-------------- next part --------------


Attempt to boot to USB 2.0 DVD-RW Drive...

Booting 'uda:/isolinux/vmlinuz initrd=uda:/isolinux/initrd.img'
malloc_diag: alloc: 272 bytes (4 blocks), free: 130792 bytes (1 blocks)
malloc_diag: alloc: 288 bytes (5 blocks), free: 130776 bytes (1 blocks)
file_open: dev=uda, path=/isolinux/vmlinuz
LinuxLabs USB bootloader
uhc_init: Found UHCI at 28c0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028c0
uhc_init: Found UHCI at 28e0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028e0
uhc_init: Found UHCI at 2c00
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 00002c00
malloc_diag: alloc: 8488 bytes (6 blocks), free: 122576 bytes (1 blocks)
init_framelist: frame_list is at 13b000
dump_link: frame_list_link: addr: 0012eb70
dump_link: frame_list_link:  raw addr: 77d0080
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 16688 bytes (7 blocks), free: 114376 bytes (1 blocks)
init_framelist: frame_list is at 13d000
dump_link: frame_list_link: addr: 0012eb90
dump_link: frame_list_link:  raw addr: 77d00a0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 24888 bytes (8 blocks), free: 106176 bytes (1 blocks)
init_framelist: frame_list is at 13f000
dump_link: frame_list_link: addr: 0012ebb0
dump_link: frame_list_link:  raw addr: 77d00c0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 27968 bytes (9 blocks), free: 103096 bytes (1 blocks)
poll_usb: poll_usb1 i=0	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001083	poll_u_root_hub2 v=00001083	poll_u_root_hub21 v=00001083	Connection on port 28d2
New USB device, setting address 2
uhci_control_msg: uhci_control_msg: request_type = 0 request = 5 wLength=0
malloc_diag: alloc: 32072 bytes (10 blocks), free: 98992 bytes (1 blocks)
dump_uhci: HCI at 000028c0
dump_td: failed_transaction: TD(0012fbc0):
dump_td: failed_transaction: type: SETUP
dump_td: failed_transaction: retries: 3
dump_td: failed_transaction: IOC
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 0
dump_td: failed_transaction: max_transfer: 7
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: 0012fbe0
dump_link: 	failed_transaction:  raw addr: 77d10f0
dump_link: 	failed_transaction: terminate: 0
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
dump_td: failed_transaction: TD(0012fbe0):
dump_td: failed_transaction: type: IN
dump_td: failed_transaction: retries: 0
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 1
dump_td: failed_transaction: max_transfer: 7ff
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: f895eaf0
dump_link: 	failed_transaction:  raw addr: 0000
dump_link: 	failed_transaction: terminate: 1
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
malloc_diag: alloc: 27968 bytes (9 blocks), free: 103096 bytes (1 blocks)
configure_device: configure_device: set_address failed!
poll_usb: poll_usb1 i=1	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=2	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=0	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001083	poll_u_root_hub2 v=00001083	poll_u_root_hub21 v=00001083	Connection on port 28d2
New USB device, setting address 2
uhci_control_msg: uhci_control_msg: request_type = 0 request = 5 wLength=0
malloc_diag: alloc: 32072 bytes (10 blocks), free: 98992 bytes (1 blocks)
dump_uhci: HCI at 000028c0
dump_td: failed_transaction: TD(0012fbc0):
dump_td: failed_transaction: type: SETUP
dump_td: failed_transaction: retries: 3
dump_td: failed_transaction: IOC
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 0
dump_td: failed_transaction: max_transfer: 7
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: 0012fbe0
dump_link: 	failed_transaction:  raw addr: 77d10f0
dump_link: 	failed_transaction: terminate: 0
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
dump_td: failed_transaction: TD(0012fbe0):
dump_td: failed_transaction: type: IN
dump_td: failed_transaction: retries: 0
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 1
dump_td: failed_transaction: max_transfer: 7ff
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: f895eaf0
dump_link: 	failed_transaction:  raw addr: 0000
dump_link: 	failed_transaction: terminate: 1
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
malloc_diag: alloc: 27968 bytes (9 blocks), free: 103096 bytes (1 blocks)
*Just keeps looping*

-----------------------------------

Attempt to boot to USB 2.0 Flash Drive...

Booting 'uda:/vmlinuz initrd=uda:/initrd'
malloc_diag: alloc: 248 bytes (4 blocks), free: 130816 bytes (1 blocks)
malloc_diag: alloc: 264 bytes (5 blocks), free: 130800 bytes (1 blocks)
file_open: dev=uda, path=/vmlinuz
LinuxLabs USB bootloader
uhc_init: Found UHCI at 28c0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028c0
uhc_init: Found UHCI at 28e0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028e0
uhc_init: Found UHCI at 2c00
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 00002c00
malloc_diag: alloc: 8464 bytes (6 blocks), free: 122600 bytes (1 blocks)
init_framelist: frame_list is at 13b000
dump_link: frame_list_link: addr: 0012eb70
dump_link: frame_list_link:  raw addr: 77d0080
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 16664 bytes (7 blocks), free: 114400 bytes (1 blocks)
init_framelist: frame_list is at 13d000
dump_link: frame_list_link: addr: 0012eb90
dump_link: frame_list_link:  raw addr: 77d00a0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 24864 bytes (8 blocks), free: 106200 bytes (1 blocks)
init_framelist: frame_list is at 13f000
dump_link: frame_list_link: addr: 0012ebb0
dump_link: frame_list_link:  raw addr: 77d00c0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 27944 bytes (9 blocks), free: 103120 bytes (1 blocks)
poll_usb: poll_usb1 i=0	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001083	poll_u_root_hub2 v=00001083	poll_u_root_hub21 v=00001083	Connection on port 28d2
New USB device, setting address 2
uhci_control_msg: uhci_control_msg: request_type = 0 request = 5 wLength=0
malloc_diag: alloc: 32048 bytes (10 blocks), free: 99016 bytes (1 blocks)
dump_uhci: HCI at 000028c0
dump_td: failed_transaction: TD(0012fbc0):
dump_td: failed_transaction: type: SETUP
dump_td: failed_transaction: retries: 3
dump_td: failed_transaction: IOC
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 0
dump_td: failed_transaction: max_transfer: 7
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: 0012fbe0
dump_link: 	failed_transaction:  raw addr: 77d10f0
dump_link: 	failed_transaction: terminate: 0
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
dump_td: failed_transaction: TD(0012fbe0):
dump_td: failed_transaction: type: IN
dump_td: failed_transaction: retries: 0
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 1
dump_td: failed_transaction: max_transfer: 7ff
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: f895eaf0
dump_link: 	failed_transaction:  raw addr: 0000
dump_link: 	failed_transaction: terminate: 1
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
malloc_diag: alloc: 27944 bytes (9 blocks), free: 103120 bytes (1 blocks)
configure_device: configure_device: set_address failed!
poll_usb: poll_usb1 i=1	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=2	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=0	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001083	poll_u_root_hub2 v=00001083	poll_u_root_hub21 v=00001083	Connection on port 28d2
New USB device, setting address 2
uhci_control_msg: uhci_control_msg: request_type = 0 request = 5 wLength=0
malloc_diag: alloc: 32048 bytes (10 blocks), free: 99016 bytes (1 blocks)
dump_uhci: HCI at 000028c0
dump_td: failed_transaction: TD(0012fbc0):
dump_td: failed_transaction: type: SETUP
dump_td: failed_transaction: retries: 3
dump_td: failed_transaction: IOC
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 0
dump_td: failed_transaction: max_transfer: 7
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: 0012fbe0
dump_link: 	failed_transaction:  raw addr: 77d10f0
dump_link: 	failed_transaction: terminate: 0
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
dump_td: failed_transaction: TD(0012fbe0):
dump_td: failed_transaction: type: IN
dump_td: failed_transaction: retries: 0
dump_td: failed_transaction: active: 0001
dump_td: failed_transaction: device_addr: 00
dump_td: failed_transaction: endpoint: 0
dump_td: failed_transaction: data_toggle: 1
dump_td: failed_transaction: max_transfer: 7ff
dump_td: failed_transaction: actual: 0
dump_td: failed_transaction: link:
dump_link: 	failed_transaction: addr: f895eaf0
dump_link: 	failed_transaction:  raw addr: 0000
dump_link: 	failed_transaction: terminate: 1
dump_link: 	failed_transaction: queue: 0
dump_link: 	failed_transaction: depth: 0
malloc_diag: alloc: 27944 bytes (9 blocks), free: 103120 bytes (1 blocks)
configure_device: configure_device: set_address failed!
*Just keeps looping*

-----------------------------------

Attempt to boot to USB low speed device (old mouse)...

Booting 'uda:/isolinux/vmlinuz initrd=uda:/isolinux/initrd.img'
malloc_diag: alloc: 272 bytes (4 blocks), free: 130792 bytes (1 blocks)
malloc_diag: alloc: 288 bytes (5 blocks), free: 130776 bytes (1 blocks)
file_open: dev=uda, path=/isolinux/vmlinuz
LinuxLabs USB bootloader
uhc_init: Found UHCI at 28c0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028c0
uhc_init: Found UHCI at 28e0
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 000028e0
uhc_init: Found UHCI at 2c00
uhc_reset: Resetting UHCI
uhc_init: uhc_init setting framelist to: 076a1510
uhc_start: Starting UHCI
dump_uhci: HCI at 00002c00
malloc_diag: alloc: 8488 bytes (6 blocks), free: 122576 bytes (1 blocks)
init_framelist: frame_list is at 13b000
dump_link: frame_list_link: addr: 0012eb70
dump_link: frame_list_link:  raw addr: 77d0080
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 16688 bytes (7 blocks), free: 114376 bytes (1 blocks)
init_framelist: frame_list is at 13d000
dump_link: frame_list_link: addr: 0012eb90
dump_link: frame_list_link:  raw addr: 77d00a0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 24888 bytes (8 blocks), free: 106176 bytes (1 blocks)
init_framelist: frame_list is at 13f000
dump_link: frame_list_link: addr: 0012ebb0
dump_link: frame_list_link:  raw addr: 77d00c0
dump_link: frame_list_link: terminate: 0
dump_link: frame_list_link: queue: 1
dump_link: frame_list_link: depth: 0
malloc_diag: alloc: 27968 bytes (9 blocks), free: 103096 bytes (1 blocks)
poll_usb: poll_usb1 i=0	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=1	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	poll_usb1 i=2	poll_u_root_hub1 v=00001080	poll_u_root_hub1 v=00001080	failed to open usb
malloc_diag: alloc: 27952 bytes (8 blocks), free: 103112 bytes (2 blocks)
malloc_diag: alloc: 27888 bytes (7 blocks), free: 103176 bytes (2 blocks)
*Errors here-because device is not a drive*
-------------------------------------------




More information about the coreboot mailing list