
On Thu, Aug 13, 2009 at 1:07 AM, Wolfgang Denk wd@denx.de wrote:
Dear Ben Warren,
In message 1250145251-23438-1-git-send-email-biggerbadderben@gmail.com you wrote:
All in-tree boards that use this controller have CONFIG_NET_MULTI added Also:
- changed CONFIG_DRIVER_CS8900 to CONFIG_CS8900
- changed CS8900_BASE to CONFIG_CS8900_BASE
- changed CS8900_BUS?? to CONFIG_CS8900_BUS??
- cleaned up line lengths
- modified VCMA9 command function that accesses the device
- removed MAC address initialization from lib_arm/board.c
Signed-off-by: Ben Warren biggerbadderben@gmail.com
v2: Fixed typo: CS8900_BUS32 -> CONFIG_CS8900_BUS32 Added more descriptive printf in cs8900_init as suggested by Wolfgang Initialize 'priv' data structure in cs8900_initialize()
Thanks. That's better, but no cigar yet.
:(
I now get this:
TRAB # run load Using CS8900-0 device TFTP from server 192.168.1.1; our IP address is 192.168.3.68 Filename 'trab/u-boot.bin-wd'. Load address: 0xc100000 Loading: data abort pc : [<0df6b254>] lr : [<0df4c694>] sp : 0df1bb74 ip : 00000004 fp : 0000083c r10: 0df79ca0 r9 : 000000c0 r8 : 0df1bfd8 r7 : 0df1c100 r6 : 0df1c140 r5 : 0000002a r4 : 0000005c r3 : 07000300 r2 : 0000002a r1 : 0df79ca0 r0 : 0df1c100 Flags: nzCv IRQs off FIQs off Mode SVC_32 Resetting CPU ...
Decoding PC and LR gives:
PC: 0x0df6b254 -- 0x0df6b228 + 0x002c cs8900_send LR: 0x0df4c694 -- 0x0df4c668 + 0x002c eth_send
Placing a few printf()s indicates that it crashes in the writel() following the rety: label. Looking at the code, the "&priv->regs->txcmd" looks a bit fishy to me. I played around a bit (guessing for "priv->regs->txcmd" and "&(priv->regs->txcmd)" but this doesn't change behaviour.
Yeah, this should be fine. I think there'd be a compile error if the compiler interpreted the '&' as belonging to something other than 'txcmd'.
I looked at a disassembly of this code and it looked like it should work. In this case, the base offset of the device is in r2 (0x07000300) and the code does store operations on this +#4 and +#6, which were the offsets in the original. I guess it would be useful to printf something like:
printf("addr = %#08x\n", &priv->regs->txcmd) just to make sure it's 0x07000304.
Other than that, I'm stumped. I'll review the code again to see if anything jumps out.
thanks again, Ben