
All:
I am involved in a U-Boot port to a new processor, and had a few implementation questions.
Question #1 ------------------------------ For serial I/O, the cpu specific function found in /cpu/<processor>serial.c named serial_getc(void); can either be implemented where - serial_getc sits a bangs on UART_rx_buff as fast as it can, until something shows up. (idle loop of wait for keystroke). OR - an independent uart_rx_int populates a ring buffer, serial_getc grabs the character from the ring buffer, if there isn't a char in the ring buffer, go to sleep for 1ms (at 115,200 Buad, 8N1; 1 char = ~87us; as long as the ring buffer can cope with 12 chars you should be OK).
It seems as if most of the implementations that I looked at do the first - which is easier, but it is also why monitors, boot loaders, etc are usually worse case power consumers. (IMHO - idle loops should be idle - not wait for keystroke - but it is harder, and adds complexity - you still can get UART interrupts when you have networking activity, and you need to make sure that you can handle both - so I can understand why it is implemented as is).
Question #2 --------------------------- For Networking functions - I have a SMSC LAN911C11 on the first target board, and every time I access the networking functions, it seems to re-initalize the SMSC 9191C111.
Is this normal? Or do I have a bug (I would assume - bug, but didn't see anything yet).
Question #3 ---------------------- In /include/configs/<board>.h what should CFG_HZ be set to? Lost of different boards seem to be set to 1000 , (but I don't think that they are all running at the same frequency) but then some are not - I could not find it int the docs (but maybe didn't look hard enough)
Question #4 -------------------- In /cpu/<cpu_type>interrupts.c in the function udelay(unsigned long usec) - how exact should this be? (exactly 1.00000us or +/- 5% is OK?)
Question #5 ---------------------- In /lib_<cup_type>/timer.c (for those processors that have it) - I have a processor that supports ticks in terms of instructions clocks (up to 750MHz) or peripheral clock ticks (up to 133MHz). I assume that peripheral clocks ticks are OK. (and that loosing the accuracy is not a big deal).
Question #6 ------------------- Which is actually more of a feature enhancement that a question - if I implement a autobaud routine in /cpu/<cpu_type>/serial.c in the function serial_tstc - that would be the correct place for it? (If no key presses, return 0, if there is a key press - figure out the speed, set the UART up properly if it is not, and then return a 1 ?)
Thanks - feedback or RTFM with pointers are welcome.
-Robin