[U-Boot] Atmel_usba_udc working (sort of)
Marcel
korgull at home.nl
Mon Jan 24 21:05:08 CET 2011
Hi,
I sort of have USB device functionality working on the SAM9G45.
I mention "sort of" because I stripped the Linux driver down to a bare minimum
I would say.
It boots a kernel image over USB using tftpboot.
As mentioned before I disabled all DMA and have implemented the driver with
bits and pieces from the at91_udc driver (mainly requests part). This mainly
because I found the at91_udc driver more easy to understand.
Further more I have set up single buffer for the bulk endpoints.
What I got working is that I use tftboot to boot my kernel image, which
probably means it does work reasonable enough for initial testing. I tested in
a dozen times and it seems to work well.
I still need to check some USB traces, but I think my main problem (NYET) was
caused by enabling the debugging in the driver I think so I ran into some
timing issues. This will be further investigated but I run a bit short on time
in my project, so I'm not sure if I can do it at this point (time issue).
Anyway. I'm not sure about one thing since I'm not as familiar with u-boot
startup than most people on this list.
I currently have this set :
int board_eth_init(bd_t *bis)
{
int rc = -1;
#if defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_GADGET_ATMEL_USBA)
printf("USB probe \n");
rc = usba_udc_probe(&brd);
if (!rc)
rc = usb_eth_initialize(bis);
return rc;
}
Now, someone (I think Albert) mentioned that this would not be preferred, but
I have no idea what IS preferred. I would like to keep things as clean as
possible, so I hope for some advice on this.
Also, I want to test the driver with DMA enabled, but I'm not sure if I can
mange that because of a very tight time schedule (things must be working end
of this week basically). I also wonder whether my current implementation
wouldn't be preferred for U-boot as it is more compact than the Linux driver.
Somehow I like this more for u-boot even though it may be a little slower in
it's communication speed as I think for u-boot robustness and small code
matter more than speed.
I have still a lot to test I guess, but the initial work is there. I also like
to commit my code at some point this week or next week (after that I'm away on
business and have no idea when I return - maybe months later). So, even when
I think the code can be improved a lot, I want to post the current code
already. Is that fine ?
Below is an output of the current status (tested with Fedora core 14 as host)
Best regards,
Marcel
U-Boot 2010.12-09833-gb2c475d-dirty (Jan 24 2011 - 20:23:37)
CPU: AT91SAM9G45
Crystal frequency: 12 MHz
CPU clock : 400 MHz
Master clock : 133.333 MHz
dram init
DRAM: 128 MiB
USB host init
FLASH: 1 MiB
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: USB probe
USB_ETH_INITIALIZE
usb_ether
Hit any key to stop autoboot: 0
Sam9g45> tftpboot uImage
using atmel_usba_udc, OUT ep2 IN ep1 STATUS ep3
MAC 00:1f:e5:00:1c:7c
HOST MAC 0a:fa:63:8b:e8:0a
ETH set config
high speed config #1: 2 mA, Ethernet Gadget, using CDC Ethernet
Issue start status
USB network up!
Using usb_ether device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename 'uImage'.
Load address: 0x70400000
Loading: #################################################################
#################################################
done
Bytes transferred = 1666648 (196e58 hex)
Automatic boot of image at addr 0x70400000 ...
## Booting kernel from Legacy Image at 70400000 ...
Image Name: Linux-2.6.33-rc4
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1666584 Bytes = 1.6 MiB
Load Address: 70008000
Entry Point: 70008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33-rc4 (marcel at p4) (gcc version 4.3.2 (GCC) ) #1 Sun Jan 23
15:25:19 CET 2011
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
More information about the U-Boot
mailing list